当前位置: 首页 > 面试题库 >

插入MySQL时转义PHP中的单引号[重复]

左丘耀
2023-03-14
问题内容

这个问题已经在这里有了答案

如何防止PHP中进行SQL注入? (28个答案)

4年前关闭。

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

我有两个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()



 类似资料:
  • 问题内容: 我有一个正在编写的脚本,用于将某些字段移至新的数据库,例如 但是如您所见,由于单引号和双引号,查询每次都会中断,是否有解决此问题的方法,例如herdok或类似的东西 问题答案: 为此而制作的。 PHP:mysql_real_escape_string

  • 本文向大家介绍php jsonp单引号转义,包括了php jsonp单引号转义的使用技巧和注意事项,需要的朋友参考一下 php中jsonp输出时一般用下面的格式: 如果中间的json string中含有单引号,这个输出就是有问题的,调用方一般是无法处理的,所以我们要对单引号进行转义。 如果是用json_encode方式生成可以用下面的方式转义: 这里 JSON_HEX_APOS 是php是提供的把

  • 问题内容: 我正在通过PHP文本框获取数据,并使用普通的insert命令将其插入MySQL数据库。文本框在文本框旁为用户提供了有关特定登录ID的注释。问题在于,当用户输入撇号(’)例如句子“我们必须照顾好PC”时,会引发错误。 我知道为什么会这样,因为SQL会将其假定为该值的字符串结尾,但是我不知道如何对其进行转义。我希望在MYSQL中转义它。 如果我在MySQL中转义它,即使没有错误生成并且插入

  • 问题内容: 如何在包含单引号或双引号的MySQL中插入一个值。即 单引号会产生问题。可能还有其他转义字符。 如何正确插入数据? 问题答案: 简单地说: 因此,在字符串中,将每个单引号替换为两个。 要么: 转义=)

  • 问题内容: 我遇到了解析错误,并且我认为是由于引号引起的。我怎样才能将其视为一个整体字符串? 问题是我不能在每个引号之前手动添加。这是我需要比较的实际文本。 问题答案: 像这样使用反斜杠 在PHP中,反斜杠用于转义引号内的特殊字符。由于PHP不能区分字符串和字符,因此您也可以使用 单引号和双引号之间的区别在于,双引号允许对字符串进行插值,这意味着您可以在字符串中内联引用变量,并且它们的值将像在字符

  • 问题内容: 当我的插入查询包含引号(例如)时,它无法插入记录。 错误MSG: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在行的’s’,’Corn Flakes 170g’,’$ 15.90’,’$ 15.90’,’$ 14.10’,’-‘)’附近使用正确的语法1 MySQL更新错误: 首先,应该是。 有什么解决办法吗? 问题答案: 用反斜杠转义报价。喜欢。 这是您的功能,使