我有代碼:PDO ERRORINFO沒有返回信息
$stmt = $db->prepare(" bla bla ");
$stmt->execute();
print_r($db->errorInfo());
這將返回:Array ([0] => 00000 [1] => [2] =>)
爲什麼不返回的錯誤信息?
我有代碼:PDO ERRORINFO沒有返回信息
$stmt = $db->prepare(" bla bla ");
$stmt->execute();
print_r($db->errorInfo());
這將返回:Array ([0] => 00000 [1] => [2] =>)
爲什麼不返回的錯誤信息?
SQLSTATE 00000表示「成功」。每PHP documentation:
如果未設置SQLSTATE錯誤代碼或沒有特定駕駛員的錯誤,下面的元素0的元素將被設置爲NULL。
是的,這就是問題所在。 –
以下報告正確的錯誤:
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
if (($stmt = $dbh->prepare(" bla bla ")) === false) {
print_r($dbh->errorInfo());
}
if ($stmt->execute() === false) {
print_r($stmt->errorInfo());
}
注意在上述期間prepare()
引起的分析錯誤報告對$dbh
。儘管prepare()
成功,但可能會導致錯誤,但該錯誤報告爲$stmt
。
在上述試驗,我的prepare()
後,立即得到了錯誤報告:
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near 'bla bla' at line 1
)
但是如果你用模擬的準備這種行爲變化。
當您啓用該屬性時,prepare()
實際上是無操作的。它只是將查詢字符串保存在$ stmt中,然後語句的實際準備將被延遲,直到您致電。因此,無論是在準備時間還是在執行時間發生錯誤(如果有),都會報告$stmt
。
我測試改變錯誤報告行,如下所示:
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
// prepare won't report SQL errors, it's virtually a no-op.
if (($stmt = $dbh->prepare(" bla bla ")) === false) {
print_r($dbh->errorInfo());
}
// execute will report errors of parsing or execution.
if ($stmt->execute() === false) {
print_r($stmt->errorInfo());
}
在這種情況下,據報道在prepare()
錯誤,而我卻得到了同樣的錯誤如上在。再次,您必須檢查$stmt
以得到後的錯誤。
你試過了'print_r($ stmt-> errorInfo());'? – andrewsi
我不知道爲什麼它不會,但無論如何異常情況會更好。 [PDO查詢失敗,但我看不到任何錯誤。如何從PDO獲取錯誤消息?](http://stackoverflow.com/a/15990858/285587) –