PHP で一重引用符を含むデータを挿入するときに MySQL エラーを回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-01 16:25:02
オリジナル
576 人が閲覧しました

How to Avoid MySQL Errors When Inserting Data Containing Single Quotes in PHP?

PHP MySQL 挿入での一重引用符のエスケープ

背景:

MySQL クエリには、特殊文字を含む可能性のある文字列の使用が含まれます。一重引用符など。これらの特殊文字は、MySQL がクエリの一部として誤って解釈しないようにエスケープする必要があります。

問題:

開発者は、MySQL データベースにデータを挿入するときに問題が発生しました。一重引用符が原因で失敗すると、MySQL エラーが発生します。この問題は、データがデータベースから取得され、電子メール テンプレートで使用される 2 番目のクエリで発生します。

原因と解決策:

原因は、適切なクエリが欠落していることです。 MySQL にデータを挿入するときにエスケープします。 2 番目のクエリはデータベースからデータを取得します。データには一重引用符が含まれる場合があります。これらの一重引用符は、電子メール テンプレートで使用するとエスケープされず、MySQL エラーが発生します。

この問題を解決するには、MySQL に挿入する前に mysql_real_escape_string() を使用してすべての文字列をエスケープします。この関数は、一重引用符を含む特殊文字をエスケープします。この関数を使用すると、データ内に一重引用符が存在するかどうかに関係なく、両方のクエリが正しく動作します。

<code class="php">$escaped_order_id = mysql_real_escape_string($order_id);
$escaped_message_content = mysql_real_escape_string($message_content);

$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
('$escaped_order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$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
('$escaped_order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$escaped_message_content', '1')");</code>
ログイン後にコピー

以上がPHP で一重引用符を含むデータを挿入するときに MySQL エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!