PHP を使用した MySQL での一重引用符のエスケープ
2 つの SQL ステートメントを使用してデータを操作する次のシナリオを考えてみましょう。最初のステートメントはフォームからデータベースに情報を挿入し、2 番目のステートメントはデータベースからデータを取得し、電子メールを送信し、トランザクションの詳細を記録します。
問題の特定
この問題は、「O'Brien」など、名前フィールドの一重引用符が原因で 2 番目のステートメントでエラーが発生した場合に発生します。最初のステートメントはこの文字をエスケープしなくても適切に機能しますが、2 番目のステートメントは MySQL エラーを引き起こします。この相違は混乱を招く可能性があります。
根本原因
この問題に対処するには、PHP の文字列を MySQL クエリに挿入する前にエスケープする必要があることを認識することが重要です。 。 PHP は、これらの文字列を効果的にエスケープし、適切な挿入とエラー防止を保証する mysql_real_escape_string() 関数を提供します。
マジック クオートの影響
2 つの SQL 間の動作の違いステートメントは、PHP の magic_quotes_gpc 機能がアクティブ化された可能性があることに起因する可能性があります。この機能は、フォーム送信から取得した文字列 ($_POST など) を自動的にエスケープするため、文字列「O'Brien」は「O'Brien」に変換されます。
データが保存され、その後取得されると、データベースは自動エスケープは実行されません。したがって、取得された文字列「O'Brien」にはエスケープされていない一重引用符が含まれており、エラーを防ぐためにクエリで使用する場合は mysql_real_escape_string() で適切にエスケープする必要があります。
エスケープに関する考慮事項
次の改訂版に示すように、SQL ステートメントで使用されるすべての文字列をエスケープすることが重要です。例:
$query = mysql_query("INSERT INTO message_log (order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status) VALUES ('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '".mysql_real_escape_string($message_content)."', '1')");
このエスケープ メカニズムを一貫して適用することで、開発者は文字列内の予期しない一重引用符によって引き起こされる MySQL エラーを効果的に防ぐことができます。
以上がPHP 文字列の一重引用符によって引き起こされる MySQL エラーを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。