単一の mysql_query() 内の複数の SQL ステートメント
単一の mysql_query() 関数呼び出しを使用して複数の SQL ステートメントを同時に実行することはできません。標準の MySQL API。これは、悪意のあるユーザーが任意の SQL ステートメントを実行してデータベースを侵害する可能性を防ぐためです。
この制限により一部のユーザーはやる気をなくす可能性がありますが、これが SQL インジェクション攻撃に対するセキュリティ対策として機能することを強調することが重要です。複数のステートメントを実行する機能を制限することで、攻撃者が脆弱性を悪用し、機密データへの不正アクセスを取得する可能性が低くなります。
ただし、複数のステートメントをアトミックに実行する別のアプローチもあります。 1 つの方法はトランザクションを使用することです。トランザクション ブロック内で複数のステートメントを囲むことにより、すべてのステートメントが正常に実行されるか、まったく実行されないかを確認できます。これにより、個々の mysql_query() 呼び出しでは不可能なレベルのアトミック性とデータ整合性が提供されます。
たとえば、質問で言及されている 2 つの UPDATE ステートメントを 1 つのトランザクション内で実行するには、次のコードを使用できます。 :
mysql_query("BEGIN TRANSACTION"); mysql_query("UPDATE table SET name = 'bob' WHERE name = 'jim'"); mysql_query("UPDATE table SET age = 55 WHERE name = 'jim'"); mysql_query("COMMIT TRANSACTION");
トランザクション内でステートメントをラップすることにより、両方のステートメントが正常に実行されるか、どちらのステートメントも実行されないかのいずれかが保証されます。このアプローチにより、より優れた制御が提供され、部分的な更新やその他の望ましくない結果が防止されます。
以上が複数の SQL ステートメントを単一の mysql_query() 呼び出しで実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。