最近、データベース テーブル内の特定のフィールドをバッチ更新する必要があり、これを実行するときに、PDO バインディングが使用されました。 。
著者は、バッチ更新に関する次の解決策を知っています:
1. 項目ごとに更新します
これは最も単純な解決策ですが、最も効率が悪いのは間違いありません。
2.場合
次のような文
リーリーSQL インジェクションを防ぐために、PDO 拡張バインディング パラメーターが使用されます。上記の数値は通常変数であるため、パラメーターのバインドが必要です。最初は、IDで構成された文字列をIN時に変数としてバインドすることを考えました。最初の実装のコードは次のとおりです。 リーリー
後になって、これは機能しないことがわかりました。奇妙なことに、この方法では最初のレコードのみを更新できるということです。情報を調べたところ、このバインド方法は実行可能ではなく、IN ステートメントのパラメータを 1 つずつバインドする必要があることがわかりました。ドキュメントのbindParam関数の説明を見てください:
説明には、PHP 変数がプレースホルダーにバインドされると記載されていることがわかります。そのため、:id が 1 と 2 の文字列がバインドされている場合、MySQL がステートメントを解析するとき、1,2 は単一の変数として解析されます。 、文字列ではありません。これは、SQL インジェクションを防ぐための PDO の原則でもあり、プレースホルダーのバインドを通じて、バインドされた値のみが値として扱われ、ステートメントなどの他のものは値として扱われません。このようにして、MySQL は渡された値のみを変数として扱います。価値。
修正された文章:
リーリー
まとめ
参考リンク:
mysqlステートメント: 複数のレコードの異なる値をバッチ更新します
配列を IN() 条件にバインドできますか?
限られた文体と限られた知識によるオリジナル記事 記事内に何か間違っている点がございましたら、お知らせください。
この記事が役に立った場合は、「おすすめ」をクリックしてください。記事を書くのは簡単ではありません。
を使用します。