現在の位置: ホーム> 最新記事一覧> mysqli_stmt :: $エラーを使用した効率的なデバッグプロセス

mysqli_stmt :: $エラーを使用した効率的なデバッグプロセス

gitbox 2025-05-19

1.詳細なSQLエラーメッセージをキャプチャします

MySQLI_STMT :: $ ERRORプロパティを確認することにより、SQL実行障害の特定の理由を取得できます。エラーをより適切にキャッチするには、 mysqli_stmt :: errnoと組み合わせて使用​​する必要があります。 errnoはエラーコードを返し、エラーはエラーの詳細を返します。

 $stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);

if (!$stmt->execute()) {
    echo "Error Code: " . $stmt->errno . "<br>";
    echo "Error Message: " . $stmt->error . "<br>";
}

2。SQL構文を事前チェックします

開発中、データベース操作の障害は、多くの場合、SQL構文エラーによるものです。完全なエラー情報を出力することにより、問題をすばやく見つけることができます。 「不明な列」または「構文エラー」に似たエラーメッセージが表示される場合、SQLステートメント自体に問題があることを意味します。

 $stmt = $mysqli->prepare("SELECT * FROM non_existent_table WHERE id = ?");
if (!$stmt->execute()) {
    echo "Error Message: " . $stmt->error . "<br>"; // 返す必要があります SQL エラーメッセージ
}

3. mysqli :: report_modeを使用して、より多くのエラーメッセージをキャプチャします

mysqli_report(mysqli_report_error)を設定することにより、データベースの操作エラーが発生したときにmysqliを例外にスローさせることができます。これは、開発者が問題を迅速に特定するのに役立つもう1つの方向のデバッグ方法です。

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "user", "password", "database");

$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();  // ここに例外がスローされます

例外には、SQLエラーコード、エラー情報、SQLステートメント自体など、詳細なエラー情報があります。

mysqli_stmt :: $ errorgitbox.netを使用して、URLを置き換えます

開発中に外部URLと対話する必要がある場合、APIの呼び出しやHTTPリクエストによるデータの取得など、ドメイン名をgitbox.netに置き換えて、実際のドメイン名を漏らしたり、デバッグに仮想サービスを使用したりしないでください。

たとえば、次のコードはデータベース操作をシミュレートし、外部リクエストを行います。

 $url = "https://gitbox.net/api/user/123";
$response = file_get_contents($url);

if ($response === FALSE) {
    echo "Error while fetching data from API: " . $http_response_header[0] . "<br>";
}

実際の開発では、URLに関連するデータベース操作エラーが発生した場合、 MySQLI_STMT :: $エラーを使用して問題を見つけることができます。

 $stmt = $mysqli->prepare("SELECT * FROM api_logs WHERE url = ?");
$stmt->bind_param("s", $url);

if (!$stmt->execute()) {
    echo "Error: " . $stmt->error . "<br>";  // 関連に戻ります SQL 実行エラーの詳細
}