sql >> データベース >  >> RDS >> Mysql

挿入する前に、データベースに行が存在するかどうかを確認してください

    チェックして挿入するのではなく、データの重複を防ぐために列に制約を設定することをお勧めします。

    imdbidにUNIQUE制約を設定するだけです :

    ALTER TABLE `requests` ADD UNIQUE `imdbid_unique`(`imdbid`);
    

    これを行う理由は、競合状態 に遭遇しないようにするためです。 。

    チェックを終了してから実際にデータを挿入するまでの間に小さなウィンドウがあり、その小さなウィンドウに、挿入されるデータと競合するデータが挿入される可能性があります。

    解決?制約を使用して、$DBH->error()を確認します 挿入エラーの場合。エラーがある場合は、重複していることがわかっているので、ユーザーに通知できます。

    これを使用していることに気づきました。$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 。この場合、->error()をチェックする必要はありません。 PDOが例外をスローするためです。次のように、実行をtryandcatchでラップするだけです。

    $duplicate = false;
    
    try {
        $STH->execute();
    } catch (Exception $e) {
        echo "<p>Failed to Request ".$_POST['imdbid']."!</p>";
        $duplicate = true;
    }
    
    if (!$duplicate)
        echo "<p>Successfully Requested ".$_POST['imdbid']."! Thanks!</p>";
    


    1. DG4ODBCのOracle言語パラメータの設定

    2. SQL Serverのxml出力にxmlエンコーディング<?xml version =1.0 encoding =UTF-8?>を追加する方法

    3. pyodbcおよびMSSQLServerとの1つの接続で複数のカーソルを使用できますか?

    4. mysqlデータベースからのBLOBイメージを表示するためにPHPページが必要です