0

重複を挿入する前に、テーブルに Id が既に存在するかどうかを確認しようとしています。

したがって、データベースのテーブルで Id の存在を確認する必要があり、存在する場合は何もしません。それ以外の場合は、レコードをテーブルに挿入します。これどうやってするの?

これ以外の方法はありますか?

Sql_query->Select id from table where key="something";

If(true) 
{
  do nothing;
}
else
{
  Insert record in database;
}

テーブル全体を検索してから挿入するには時間がかかるため、これは避けたいと思います。それで、実行可能な方法はありますか?

4

3 に答える 3

4

2 つの戦略:

  1. データベースにこのタスクを実行させます。一意にするフィールドが実際に一意のインデックスになるように、テーブルを変更します。データを挿入しようとして、それが重複している場合は、次に何をすべきかを決定するために使用できるエラーが表示されます。またはON DUPLICATE KEY、必要に応じて、代わりに別のテーブル操作を実行する場合に を使用することもできます。
  2. テーブルにクエリを実行して、ID が既に存在するかどうかを確認します。そうでない場合は、挿入物を生成します。

例:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$result = $mysqli->query("SELECT id FROM yourtable");
if ($result->num_rows > 0) {
    /* do your insert */
}
$result->close();

データベースに仕事を任せることを好みます。

アップデート:

リクエストに応じて、一意のインデックスをテーブルに追加する方法の 2 つの例を次に示します。SQL は次のようになります。

CREATE UNIQUE INDEX your index_name
ON your_table (your_id_field);

データを挿入するとき、キーが既に存在する場合、mysql はエラーをスローします。このエラーを処理するには、次のようにします。

$SQL = 'INSERT INTO yourtable (yourfield1, yourfield2) 
        VALUES ( 1, "Hello")';    
$result = $mysqli->query($SQL);

if (!mysqli_query($link, $SQL)) {
    if(mysqli_errno($link) == 1062) {
         /* duplicate ... whatever you want in this case */
    }
}

もちろん、この状況で何もしたくない場合は、このエラー処理をすべて行う必要はありません。

于 2013-06-29T11:34:32.137 に答える
2

次のコードでそれを行うことができます。

<?php
   if($stmt = $db->prepare("SELECT * FROM tablename WHERE id=?")){
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $stmt->store_result();

    if($stmt->num_rows == 0){
      // CREATE RECORD
    }
   }
?>

テーブルを検索して、クエリが何かを返すかどうかを確認するだけです

于 2013-06-29T11:32:21.960 に答える
0

列に一意のインデックスを作成し (主キーをチェックしていない場合)、ON DUPLICATESQL クエリを作成するときに使用します。これについての詳細: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2013-06-29T11:38:50.173 に答える