ホームページ >バックエンド開発 >PHPチュートリアル >PDO プリペアド ステートメントはバルク データ挿入をどのように最適化し、セキュリティとパフォーマンスを強化できますか?
PDO プリペアド インサート: 一括データ挿入のセキュリティとパフォーマンスの強化
データ操作の分野では、PDO プリペアド ステートメントは優れたレベルを提供します。静的クエリと比較してセキュリティとパフォーマンスが向上します。これは一括データ挿入にも拡張され、単一のクエリで複数行の値を効率的に挿入できます。
PDO のプリペアド ステートメントを活用して、「1 つのクエリを使用して複数行の値を挿入」を生成できます。重要なのは、複数の値のセットに対応する構造化クエリを作成することです。
説明のために、次の SQL ステートメントを考えてみましょう。
INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),...
このステートメントでは、各値のセットが囲まれています。独自のかっこのセット内にあります。このクエリを準備済み挿入に適用するには、各列のプレースホルダー シーケンスを利用し、これらのプレースホルダーを連結して VALUES 部分を作成します。
たとえば、2 つの列がある場合、VALUES 部分は次のようになります。
(?,?),
次に、この VALUES 部分をデータ行ごとに複製し、それらをカンマ:
(?,?), (?,?), ...
最後に、完全なクエリを構築できます:
INSERT INTO `tbl` (`key1`,`key2`) VALUES (?,?) , (?,?), ...
このクエリを PDO で実行するには、ステートメントを準備し、次のコマンドを使用してすべての値を含む配列を提供します。 execute()メソッド。以下のコードは、このアプローチを示しています。
$data = [['valueA1', 'valueB1'], ['valueA2', 'valueB2']]; $values = implode(',', array_fill(0, count($data[0]), '?')); $sql = "INSERT INTO table (colA, colB) VALUES " . implode(',', array_fill(0, count($data), "($values)")) . ";"; $stmt = $db->prepare($sql); $stmt->execute(array_merge(...$data));
この手法は、入力をサニタイズすることでデータの整合性を確保するだけでなく、複数行の挿入に対して単一のクエリを実行することでパフォーマンスを最適化します。
以上がPDO プリペアド ステートメントはバルク データ挿入をどのように最適化し、セキュリティとパフォーマンスを強化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。