ホームページ > データベース > mysql チュートリアル > MySQL クエリ エラーを防ぐために、PHP で一重引用符を適切にエスケープするにはどうすればよいですか?

MySQL クエリ エラーを防ぐために、PHP で一重引用符を適切にエスケープするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-18 16:51:10
オリジナル
801 人が閲覧しました

How Can I Properly Escape Single Quotes in PHP to Prevent MySQL Query Errors?

MySQL クエリの PHP での一重引用符のエスケープ

問題の理解

PHP を使用して MySQL にデータを挿入しようとする場合、一重引用符文字は、挿入されたデータにアクセスする後続のクエリでエラーを引き起こす可能性があります。最初のクエリは正しく動作しているように見えますが、データに一重引用符が含まれている場合、2 番目のクエリでは MySQL エラーが発生します。

問題の解決

解決策は次のとおりです。 mysql_real_escape_string() 関数を使用して、挿入された文字列内の単一引用符文字をエスケープします。この関数は、一重引用符をエスケープされた対応する文字 (') に置き換え、それらがクエリ構文の一部ではなくリテラル文字として解釈されるようにします。

差異の理由

2 つのクエリの動作が異なる理由は、magic_quotes_gpc 構成パラメータの設定が原因である可能性があります。この設定を有効にすると、$_GET、$_POST、$_COOKIES から取得した文字列は一重引用符を含めて自動的にエスケープされます。

ただし、データがデータベースに保存されて再度取得されると、エスケープされなくなります。自動的に逃げた。したがって、2 番目のクエリがデータにアクセスしようとすると、エスケープされていない一重引用符が発生し、エラーが発生します。

改訂されたクエリ

この問題を解決するには、次のようにします。両方のクエリで一重引用符をエスケープします。 mysql_real_escape_string():

$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', mysql_real_escape_string('$booking_name'), mysql_real_escape_string('$address'), mysql_real_escape_string('$suburb'), mysql_real_escape_string('$postcode'), '$state_id', '$region_id', mysql_real_escape_string('$email'), mysql_real_escape_string('$phone'), mysql_real_escape_string('$phone2'), mysql_real_escape_string('$mobile'), STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', mysql_real_escape_string('$special_instructions'), '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");
ログイン後にコピー
$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', mysql_real_escape_string('$from'), '$row->supplier_id', mysql_real_escape_string('$row->primary_email') ,mysql_real_escape_string('$row->secondary_email'), mysql_real_escape_string('$subject'), mysql_real_escape_string('$message_content'), '1')");
ログイン後にコピー

一重引用符をエスケープすることで、両方のクエリで MySQL エラーが発生することなく一重引用符を含むデータが正しく処理されるようになります。

以上がMySQL クエリ エラーを防ぐために、PHP で一重引用符を適切にエスケープするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート