データベース操作にPHPのMySQLI拡張機能を使用する場合、データベースクエリを実行するときにエラーが発生することは避けられません。特に、 mysqli_stmt_execute()を使用してプリプロセシングステートメントを実行する場合、エラーメッセージがエラーの特定の原因を直接説明しない場合があります。この時点で、 MySQLI :: $ errno属性を使用して、エラーを見つけるのに役立ちます。
mysqli :: $ errnoは、PHPのMySQLI拡張機能のプロパティであり、最後のMySQL操作で発生したエラーコードを示しています。 mysqli_stmt_execute()を実行するときにエラーが発生した場合、 mysqli :: $ errnoを介して詳細なエラーコードを取得できるため、開発者が問題を迅速に見つけることができます。
mysqli :: $ errnoおよびmysqli :: $エラーは、 mysqlデータベース操作の例外をよりよく理解するのに役立ちます。
エラーの一般的な原因には以下が含まれます。
SQLステートメントの構文エラー。
不一致のデータ型のバインディングなど、パラメーターバインディングエラー。
データベース接続の問題。
データベースアクセス許可などが不十分です。
これらのエラーは、返されたブール値またはmysqli :: $ errorによってプロンプトされることがありますが、問題を特定するために、mysqli :: $ errnoを組み合わせてエラーのエラーコードを取得できます。
mysqli_stmt_execute()によって返されたブール値を使用して、実行が成功するかどうかを判断できます。 falseが返された場合、実行が失敗したことを意味します。現時点では、 mysqli :: $ errnoおよびmysqli :: $ errorを介して詳細なエラー情報を取得できます。
<?php
// データベース接続を作成します
$mysqli = new mysqli("localhost", "username", "password", "database");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
// 準備する SQL 声明
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
// バインドパラメーター
$username = 'testuser';
$email = 'testuser@m66.net';
$stmt->bind_param("ss", $username, $email);
// 执行声明
if (!$stmt->execute()) {
echo "エラーコード: " . $stmt->errno . "<br>";
echo "エラーメッセージ: " . $stmt->error . "<br>";
} else {
echo "正常に挿入します!<br>";
}
// 关闭声明和连接
$stmt->close();
$mysqli->close();
?>
データベース接続:最初に、新しいmysqli()を介してデータベース接続を作成し、接続が成功したかどうかを確認します。
SQLステートメントの準備: prepare()メソッドを使用して、SQL INSERTステートメントを準備してユーザーデータを挿入します。
バインドパラメーター:挿入されたパラメーターをbind_param()メソッドを介してバインドして、正しいデータ型を確保します。
ステートメントを実行してエラーを確認します: mysqli_stmt_execute()メソッドを実行するときにfalseが返された場合、実行エラーが発生したことを意味します。 $ stmt-> errnoを使用してエラーコードを取得し、 $ stmt->エラーを使用してエラー説明を取得できます。
上記のコードでは、実行にエラーがある場合、エラーコードとエラーメッセージを出力して、問題をすばやく見つけるのに役立ちます。
接続を閉じます:最後に、プレアセシングステートメントとデータベース接続を閉じます。
mysqli :: $ errnoによって取得されたエラーコードは、MySQLデータベースによって返される標準エラーコードです。一般的なエラーコードは次のとおりです。
1045 :ユーザーのために拒否されたアクセス- データベースアクセスが不十分です。
1064 : SQL構文-SQL構文エラーにエラーがあります。
1062 :重複するエントリ- 重複データを挿入し、一意の制約に違反します。
2002 :ローカルMySQLサーバーに接続できません- MySQL Serverに接続できません。
これらのエラーコードは、データベース操作の障害の理由を明確にするのに役立ちます。
MySqli :: $ errnoプロパティを使用すると、データベース操作でエラーコードをすばやく取得し、 mysqli :: $エラーのエラー情報と組み合わせることで、問題の根本原因をより簡単に見つけることができます。 mysqli_stmt_execute()でエラーが発生したら、最初に戻り値を確認し、エラーコードを介して問題をさらにトラブルシューティングし、開発効率を改善し、デバッグ時間を短縮します。