ホームページ >データベース >mysql チュートリアル >PHP で整数配列を使用して複数の MySQL レコードを効率的に更新するにはどうすればよいですか?

PHP で整数配列を使用して複数の MySQL レコードを効率的に更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-09 10:50:061033ブラウズ

How to Efficiently Update Multiple MySQL Records Using an Integer Array in PHP?

MySQL クエリで整数の配列を使用する方法 (PHP)

問題:

MySQL クエリでランダムなコンテンツ アイテム ID の配列を利用する方法が必要です。各 ID は、配列内での出現順に WHERE 句に配置されます。このクエリは、配列内の個々の ID に対する UPDATE である必要があります。

解決策:

PHP 内の SQL 操作にはプリペアド ステートメントを使用することを強くお勧めします。プリペアド ステートメントは、SQL インジェクション攻撃を防止し、データベース ステートメントのコンパイルによる効率を向上させることで、セキュリティを強化します。検討できる 2 つのアプローチは次のとおりです。

反復アプローチ:

$ids = array(2, 4, 6, 8);

$sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id = ?";
$stmt = $mysqli->prepare($sql);

for ($i = 0; $i < count($ids); $i++) {
    $stmt->bind_param("i", $ids[$i]);
    $stmt->execute();
    echo "Updated record ID: $id\n";
}

$stmt->close();

単一実行アプローチ:

$ids = array(2, 4, 6, 8);

$params = implode(",", array_fill(0, count($ids), "?"));
$sql = "UPDATE MyTable SET LastUpdated = GETDATE() WHERE id IN ($params)";
$stmt = $mysqli->prepare($sql);

$types = str_repeat("i", count($ids)); // "iiii"
$args = array_merge(array($types), $ids); // ["iiii", 2, 4, 6, 8]
call_user_func_array(array($stmt, 'bind_param'), ref($args)); // $stmt->bind_param("iiii", 2, 4, 6, 8)

$stmt->execute();

$stmt->close();
echo "Updated record IDs: " . implode("," $ids) ."\n";

追加する必要がある追加フィールドについては、SQL にパラメータのプレースホルダを追加するだけですステートメント。

選択するアプローチ:

  • 反復アプローチ: それぞれに対してデータベース呼び出しが行われる UPDATE および INSERT 操作に適しています。 Record.
  • 単一実行アプローチ: SELECT および DELETE クエリ、またはすべてのレコードが同様に変更される UPDATE 操作に対して効率的です。

プリペアド ステートメントの利点:

  • に対するセキュリティの強化SQL インジェクション攻撃。
  • ステートメントのコンパイルとデータの削減による効率の向上transfer.
  • データベースへの完全な SQL 文字列の繰り返し送信の防止。

以上がPHP で整数配列を使用して複数の MySQL レコードを効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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