2017-04-24 80 views
1

當我在命令行中運行查詢,我得到一個類似的結果:如何在使用PHP的mysql或pdo中顯示ALTER語句的結果?

Query OK, 0 rows affected (0.23 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

有沒有辦法讓使用PHP PDO上面的信息?

+0

前兩個很容易,那只是檢查查詢是否被執行,並且受影響的行(例如'mysqli_affected_rows()')。不知道其餘的。 – Qirel

+0

@Shadow提供了一個很好的答案。當需要上述信息時,很容易創建一個單獨的mysqli連接而不是PDO,並使用'$ mysqli-> query($ sql); echo $ mysqli-> info;'。 –

回答

1

有沒有簡單的方法,因爲這個信息是由mysql_info()返回的C API調用(這是C API,而不是mysql多年前在php中棄用的API,儘管它確實實現了相同的調用),這在PDO中沒有實現太特定於供應商。

您可以使用PDOStatement::rowCount()返回受影響的行數或匹配的行數。然而,該方法返回的值取決於你如何配置到MySQL的連接:如果你離開這個選項了

$connection = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); 

如果您提供PDO::MYSQL_ATTR_FOUND_ROWS的配置選項,然後rowCount()返回匹配的行,那麼rowCount()將返回受影響的行。因此,沒有簡單的方法可以在單個連接中獲取這兩種信息。

要獲得警告的數量,您可以發出一條show warnings sql語句,並循環遍歷其結果集並計算結果集中的警告(或可能是註釋)。 show warnings結果也包含錯誤和備註,這就是爲什麼您可能需要過濾列表。

我不知道如何獲取最後一條語句的重複數量。

的mysqli

如果您使用的mysqli替代PDO,那麼你可以使用mysqli_info()來電索取您正在尋找的數據。

0

And ...使用microtime(true)獲取計時。並執行SHOW WARNINGS(好像它是一個SELECT)以獲得任何警告(或無)。