MySQLiのプリペアドステートメントエラーレポート [重複]
質問
MySQliを使いこなそうとしているのですが、エラー報告に戸惑っています。 私はMySQLiの'prepare'ステートメントの戻り値を使って、このようにSQLを実行するときにエラーを検出するようにしています。
$stmt_test = $mysqliDatabaseConnection->stmt_init();
if($stmt_test->prepare("INSERT INTO testtable VALUES (23,44,56)"))
{
$stmt_test->execute();
$stmt_test->close();
}
else echo("Statement failed: ". $stmt_test->error . "<br>");
しかし、prepare文の戻り値は、SQL文のpreperationにエラーがある場合のみ検出し、実行エラーは検出しないのでしょうか?もしそうなら、実行行もこのようにエラーをフラグするように変更すべきでしょうか。
if($stmt_test->execute()) $errorflag=true;
そして、念のため、ステートメントが実行された後、次のようなこともしておいたほうがいいでしょう。
if($stmt_test->errno) {$errorflag=true;}
...あるいは、私は最初からOKで、MySQLi の prepare' ステートメントの戻り値は、それが定義するクエリの完全な実行に関連するすべてのエラーを捕捉していたのでしょうか。
感謝 C
どのように解決するのですか?
mysqliの各メソッドは失敗する可能性があります。それぞれの戻り値をテストする必要があります。1 つでも失敗したら、期待する状態にないオブジェクトで処理を続けることに意味があるかどうかを考えてください。(安全な状態でない可能性もありますが、ここでは問題ないと思います。)
最後の操作に対するエラーメッセージのみが接続/ステートメントごとに保存されるため、次のような情報を失う可能性があります。 何 に関する情報を失うかもしれません。この情報を使って、スクリプトが再試行するか(一時的な問題)、何かを変更するか、完全にやめるか(バグを報告するか)を決定したいと思うかもしれません。そして、それはデバッグをより簡単にします。
$stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)");
// prepare() can fail because of syntax errors, missing privileges, ....
if ( false===$stmt ) {
// and since all the following operations need a valid/ready statement object
// it doesn't make sense to go on
// you might want to use a more sophisticated mechanism than die()
// but's it's only an example
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$rc = $stmt->bind_param('iii', $x, $y, $z);
// bind_param() can fail because the number of parameter doesn't match the placeholders in the statement
// or there's a type conflict(?), or ....
if ( false===$rc ) {
// again execute() is useless if you can't bind the parameters. Bail out somehow.
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$rc = $stmt->execute();
// execute() can fail for various reasons. And may it be as stupid as someone tripping over the network cable
// 2006 "server gone away" is always an option
if ( false===$rc ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->close();
6年後のメモです。
mysqli 拡張モジュールは、0 以外の (mysqli) エラーコードを発生させる操作を例外として報告することが可能です。
mysqli_driver::$report_mode
.
ダイ()
は本当に、本当に下品で、私はもうこのような例のためにさえ使いません。
という事実だけを取り上げて、お願いします。
それぞれ
(mysql) の操作
は
は多くの理由で失敗します。
もし
であってもです。
関連
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み] PDOのプリペアドステートメントは、SQLインジェクションを防ぐのに十分ですか?
-
[解決済み] PDO MySQL。PDO::ATTR_EMULATE_PREPARES を使うか使わないか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み] mysqli_fetch_array() を使用します。引数 #1 は mysqli_result 型でなければなりません。mysqliの問題に対処するには?