0

更新/挿入する前に、データベースに何かが存在するかどうかを確認したい。これは 1 つで 2 つの質問ですが、似ています。

これが私のやり方です。

$p->main .= '<td><input type="text" name="value"  id="value"  size="12" maxlength="50" />';

    $statement = $conn->prepare("SELECT year, month, name table_test WHERE MLOV_year= :Year 
                 AND month= month AND name= :name");

                $bind = array(
                                'year' => $year,
                                'month'   = > $month,
                'name' = > $name
                );


                $statement->tyu_exec_sql_bind($conn,$statement, $bind );

                 if ( false === $statement->fetch()) {
                               // I will run an insert statement here.
                }



    $p->main .= '</td>';
    $p->main .= '</tr>';

質問 この方法を試したのはこれが初めてで、正しいかどうか疑問に思っていました。また、それがセキュリティですか?

4

2 に答える 2

1

データベースによってはMERGE、レコードが存在しない場合はレコードを挿入し、存在する場合はアトミックに更新する を使用できる場合があります。

これは、2 段階のプロセスになるため、自分で行うチェックよりも望ましい方法です。理論的には、他の誰かがチェックと挿入の間にレコードを挿入し、挿入が失敗する可能性があります。


準備済みステートメントを使用して、SQL インジェクションを防ぎます。最初のコードでそれを行ったのに、なぜ 2 番目のコードでそれを行わなかったのでしょうか?

ヒントとして、次の人がこれを読むのを混乱させる update ステートメントが含まれている場合は、変数を「delete」と呼ばないでください。

于 2013-11-06T11:46:28.547 に答える
0

まず、値がデータベースに存在することを確認する必要があります。つまり、クエリを実行してから、更新または削除の決定を下す必要があります。

重複する値の挿入を防ぐ一意キー制約をテーブルに設定することもできます。

于 2013-11-06T11:40:33.060 に答える