php - 插入MySQL时在PHP中转义单引号

标签 php mysql insert escaping

我有一个令人困惑的问题,我似乎无法理解......

我有两条 SQL 语句:

  • 第一个将表单中的信息输入数据库。
  • 第二个从上面输入的数据库中获取数据,发送一封电子邮件,然后记录交易的详细信息

问题是单引号似乎仅在第二个条目上触发 MySQL 错误!第一个实例正常工作,但第二个实例触发 mysql_error()

表单中数据的处理方式是否与表单中捕获的数据不同?

查询 1 - 这没有问题(并且没有转义单引号)

$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', '$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')");

查询 2 - 输入带单引号的名称时失败(例如,O'Brien)

$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', '$message_content', '1')");

最佳答案

您应该使用 mysql_real_escape_string() 转义每个字符串(在两个片段中)。

http://us3.php.net/mysql-real-escape-string

您的两个查询行为不同的原因可能是因为您打开了 magic_quotes_gpc(您应该知道这是一个坏主意)。这意味着从 $_GET、$_POST 和 $_COOKIES 收集的字符串会为您转义(即 "O'Brien"-> "O\'Brien")。

一旦您存储数据并随后再次检索它,您从数据库中返回的字符串将不会自动为您转义。你会得到“O'Brien”。因此,您需要通过 mysql_real_escape_string() 传递它。

关于php - 插入MySQL时在PHP中转义单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687866/

相关文章:

php - 在 AJAX 上将多个 PHP 数组传递给 JavaScript 成功

php mysql 比较值

php - 查询密集型网站中的查询日志记录场景

mysql - SQL 连接第三个表

java - 将 dd/mm/yyyy 日期格式插入数据库表

php - 将 Yii2 php stdClass() 对象转换为特定类的对象

sql - 嵌套查询以在表 B 中查找详细信息以获得表 A 中的最大值

MySQL INSERT ... ON DUPLICATE KEY 不更新表,没有错误或警告

php - 将数据插入交集表

string - 使用 awk 或 send 查找字符串并在其前面插入另一个复杂字符串