2009-03-27 23 views
3

エラーが検出されなかったため、PDOを使用して問題が発生しました。PDOのトラブルシューティング:プリペアドステートメントの実行時にエラーが発生しない

コードはシンプルで、うまく動作しますが、私は混乱を避けるために、サンプルが含まれます:

$sql = 'INSERT INTO somedatetable (something) 
     VALUES (:something) 
     ON DUPLICATE KEY UPDATE something=:something'; 

$values = array(":something" => $something); 

try { 
    $stmt = $dbh->prepare($sql);  
    $stmt->execute($values);  
} catch (PDOException $e) { 
    echo "Error: " . $e->getMessage() . "<br />\n"; 
} 

コードが新しいモジュールで作業する場合は、しかし、私が問題に遭遇したが正常に動作していますレコードが追加または変更されず、エラーがキャッチされませんでした。

$stmtfalseが返されましたが、私はその理由を、またどのようにエラーを見つけるのか分かりませんでした。

解決策は簡単でしたが、私はテーブルへの書き込み権限を持たない限られたMySQLユーザーを使用していました。これらのエラーは、mysqlを使用しているときにはすぐに表示されますが、PDOを使用して取得する方法はわかりません。

これらの種類のデータベースエラーを表示または捕捉するにはどうすればよいですか?例外のよう

答えて

7

PDO::errorInfo()またはPDOStatement->errorInfo()

"Errors and error handling" in PDOのためのドキュメントを確認してください。デフォルトでは例外がスローされないため、有効にすることができます。

は、同様に参照してください:

+1

おかげで、私が知っている必要があります正確に何を私に伝えています。しかしもう1つの質問ですが、なぜエラーがキャッチされないのですか? – jeroen

+0

あなたはそれが偽を返すと言いました、それは捕まえられたということを意味します;-) –

+0

Ummmmmmmm、メッセージを表示しないとcatchステートメントを持つ点は何ですか?私はそれの全体のポイントは、これらの(成功)他の組み合わせを取り除くことだと思った... – jeroen

関連する問題