try {
$db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
$st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
echo $e->getMessage();
}
如何在上述情況下檢查mysql錯誤的查詢?如何查看PDO中的查詢錯誤PHP
try {
$db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
$st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
echo $e->getMessage();
}
如何在上述情況下檢查mysql錯誤的查詢?如何查看PDO中的查詢錯誤PHP
我猜你的抱怨是這個例外沒有解僱。 PDO最有可能配置爲不拋出異常。這個讓他們:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
我使用這個無需任何額外的設置:
if (!$st->execute()) {
print_r($st->errorInfo());
}
您需要設置錯誤模式屬性PDO :: ATTR_ERRMODE以PDO :: ERRMODE_EXCEPTION。
而且由於您期望prepare()方法拋出異常,因此應該禁用PDO :: ATTR_EMULATE_PREPARES * 功能。否則,MySQL服務器在執行之前不會「看到」該語句。
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
}
catch(Exception $e) {
echo 'Exception -> ';
var_dump($e->getMessage());
}
打印(對我來說)
Exception -> string(91) "SQLSTATE[42S02]: Base table or view not found:
1146 Table 'test.doesnotexist' doesn't exist"
看http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/
EMULATE_PREPARES =真似乎是爲PDO_MYSQL驅動程序的默認設置現在。 查詢緩存的東西已經修復/從那時起,並與mysqlnd驅動程序我沒有EMULATE_PREPARES = false的問題(雖然我只是一個PHP愛好者,不要把我的話...)
*),然後有PDO::MYSQL_ATTR_DIRECT_QUERY - 我必須承認,我不明白這兩個屬性(相互作用還),所以我把他們兩個,像
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
這個工作對我來說如果你得到這個錯誤:
致命錯誤:調用未定義的方法的mysqli ::錯誤()
if(! empty($db->error)){
echo $db->error; // <- this is not a function call error()
}
爲什麼downvote,我的代碼有問題嗎? – 2017-12-20 10:56:55
/*惹的錯誤 - 骨頭表不存在*/
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();
echo "\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
輸出
Array
(
[0] => 42S02
[1] => -204
[2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704
)
不能繼續工作,我知道我的查詢是錯誤的,但我想顯示該錯誤。 – TPSstar 2012-01-08 08:48:12
您可能會發現調用'new PDO(...'本身時出錯,嘗試通過設置例如'error_reporting(E_ALL)'來提高error_reporting的級別。 – 2012-01-08 08:49:40