PHPでMySQLデータベースを使用する場合、データを挿入する際にいくつかの一般的なエラーが発生する可能性があります。そのうちの1つは主要なキー競合エラーです。つまり、既存のプライマリキー値を挿入しようとすると、MySQLはエラー(通常はエラー番号1062)が返されます。
MySQLI拡張機能を使用する場合、 MySQLI :: $ errnoを介してこれらのエラーをキャッチできます。 mysqli :: $ errno属性は、最後のmysqlクエリによって返されたエラー番号を保存します。このプロパティを通じて、主要な主要な競合を簡単に検出し、それに応じてそれらを処理できます。
データを挿入するときに、重複するプライマリキーエラー(エラー番号1062)をキャプチャする方法を示す簡単な例を示します。
<?php
// データベース接続構成
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "my_database";
// 接続を作成します
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続が成功しているかどうかを確認してください
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
// データを挿入します SQL 声明
$sql = "INSERT INTO users (id, username) VALUES (1, 'new_user')";
// 埋め込む SQL クエリ
if ($conn->query($sql) === TRUE) {
echo "新しいレコード挿入に正常に";
} else {
// 重複したプライマリキーエラーであるかどうかを確認してください(エラー番号 1062)
if ($conn->errno == 1062) {
echo "間違い: プライマリキー値を複製します。";
} else {
echo "間違い: " . $conn->error;
}
}
// 接続を閉じます
$conn->close();
?>
データベース接続:最初に、新しいmysqli()を使用してデータベース接続を作成します。データベースのホスト名、ユーザー名、パスワード、データベース名を提供します。接続が失敗した場合、プログラムはエラーメッセージで終了します。
SQL挿入ステートメント:ユーザーテーブルに新しいレコードを挿入する簡単な挿入ステートメントを書きました。 ID列が主キーであり、挿入しようとするID値が1であると仮定します。
SQLクエリを実行: $ conn-> query($ sql)を使用してSQL挿入操作を実行します。挿入が成功した場合、返品値は真であり、挿入の迅速なメッセージが成功します。
キャッチエラー:挿入が失敗した場合(一次競合など)、 $ conn-> errnoはエラー番号を返します。この例では、 $ conn-> errnoが1062であるかどうかを確認します。これは、MySQLで繰り返される主要なキーエラーのエラー番号です。重複したプライマリキーエラーの場合、特定のエラーメッセージ「鈍いプライマリキー値」を出力します。別のタイプのエラーの場合、MySQLによって返されたエラーメッセージが表示されます。
接続の接続:操作が完了した後、 $ conn-> close()を使用してデータベース接続を閉じてリソースをリリースします。
mysqli :: $ errnoを使用することにより、MySQLエラー、特に一般的な重複する一次キーエラー(エラー番号1062)を簡単にキャッチおよび処理できます。この方法は、プログラムの堅牢性を改善し、プライマリキーの重複によって引き起こされるプログラムのクラッシュやエラーを回避するのに役立ちます。
処理ロジックをさらに改善したい場合は、挿入のスキップ、既存のレコードの更新、より詳細なエラーメッセージの返却など、重複するプライマリキーエラーをキャッチするときに、より適切なアクションを実行できます。