首页 >后端开发 >php教程 >PHP插入包含单引号的数据时如何避免MySQL错误?

PHP插入包含单引号的数据时如何避免MySQL错误?

Patricia Arquette
Patricia Arquette原创
2024-11-01 16:25:02668浏览

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

在 PHP MySQL 插入中转义单引号

背景:

MySQL 查询涉及使用可能包含特殊字符的字符串,比如单引号。必须对这些特殊字符进行转义,以防止 MySQL 将它们误解为查询的一部分。

问题:

开发人员在将数据插入 MySQL 数据库时遇到问题由于单引号触发 MySQL 错误而失败。该问题发生在第二个查询中,其中从数据库检索数据并在电子邮件模板中使用数据。

原因和解决方案:

罪魁祸首是缺乏适当的将数据插入 MySQL 时转义。第二个查询从数据库中检索数据,其中可能包含单引号。这些单引号在电子邮件模板中使用时不会转义,从而导致 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn