ホームページ >データベース >mysql チュートリアル >SQL インジェクションを防ぎながら複数の行を MySQLi に効率的に挿入するにはどうすればよいですか?

SQL インジェクションを防ぎながら複数の行を MySQLi に効率的に挿入するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-24 17:09:11517ブラウズ

How Can I Efficiently Insert Multiple Rows into MySQLi While Preventing SQL Injection?

SQL インジェクション軽減策を使用した MySQLi への複数行の効率的な挿入

PHP および MySQLi を使用して MySQL データベースに大量の行を挿入するには、以下が必要です安全かつ効率的な技術です。このようなデータ量を処理する際に SQL インジェクションを回避するのは困難な場合があります。

解決策

この問題を解決するには、トランザクションを使用して挿入操作をグループ化することを検討してください。このアプローチには、次に示すように、準備操作とバインド操作をループの外に移動することが含まれます。

$array = array("array", "with", "about", "2000", "values");
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);

$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");

トランザクションの利点

  • 速度の向上: トランザクション内で SQL クエリを実行すると、オーバーヘッドが大幅に削減され、パフォーマンスが向上します。 10,000 回の反復テストでは、トランザクションを使用すると速度が 2 倍向上することがわかりました。
  • SQL インジェクション軽減策: トランザクションは、一連の操作を単一のアトミック単位にグループ化し、すべてかゼロかを保証します。の行が挿入されます。これにより、部分的な挿入が防止され、SQL インジェクションの試行から保護されます。

実装

全体の挿入を確実にするために、PHP ループの外側で START TRANSACTION クエリと COMMIT クエリを実行することを忘れないでください。操作は単一のトランザクションとして扱われます。このアプローチは、スタック オーバーフローを軽減しながら、プリペアド ステートメントのセキュリティと一括挿入の効率を組み合わせます。

以上がSQL インジェクションを防ぎながら複数の行を MySQLi に効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。