當我在命令行中運行查詢,我得到一個類似的結果:如何在使用PHP的mysql或pdo中顯示ALTER語句的結果?
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
有沒有辦法讓使用PHP PDO上面的信息?
當我在命令行中運行查詢,我得到一個類似的結果:如何在使用PHP的mysql或pdo中顯示ALTER語句的結果?
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
有沒有辦法讓使用PHP PDO上面的信息?
有沒有簡單的方法,因爲這個信息是由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()來電索取您正在尋找的數據。
And ...使用microtime(true)
獲取計時。並執行SHOW WARNINGS
(好像它是一個SELECT
)以獲得任何警告(或無)。
前兩個很容易,那只是檢查查詢是否被執行,並且受影響的行(例如'mysqli_affected_rows()')。不知道其餘的。 – Qirel
@Shadow提供了一個很好的答案。當需要上述信息時,很容易創建一個單獨的mysqli連接而不是PDO,並使用'$ mysqli-> query($ sql); echo $ mysqli-> info;'。 –