【问题标题】:SQL Quotes a produce sql syntax error on one server, not anotherSQL Quotes 在一个服务器上产生 sql 语法错误,而不是另一个
【发布时间】:2014-10-30 21:09:31
【问题描述】:

这里很奇怪,我将一个站点和数据库从一台 LAMP 服务器移动到另一台。在旧服务器上,用户可以毫无问题地将文本输入到包含引号的文本区域。我假设它在 php 或 sql 配置文件中,问题是,我在旧站点上的主机不会提供这些文件,所以我不确定要更改什么。任何想法为什么它适用于一个而不是另一个?

这是代码行以防万一:

mysql_query("UPDATE Stu SET Stu_IDD = '$snumd', First = '$first', Last = '$last', 
             MPhone = '$mphone', HPhone = '$hphone',  EContact = '$econtact', 
             EPhone = '$ephone', GMail = '$gmail', PMail = '$pmail', 
             Address = '$address', Apt = '$apt', Pcode = '$pcode', 
             City = '$city', DOB = '$dob', Gender = '$gender', 
             Deaf = '$deaf', Notes = '$notes' 
             WHERE Stu_ID = '$snum'") 
      or die(mysql_error());

非常感谢您的宝贵时间和回复!

【问题讨论】:

  • 1) 语法错误的文本是什么? 2) 您可能希望将此查询参数化,因为您可能会让自己面临 sql 注入攻击。

标签: php mysql quotes


【解决方案1】:

在旧服务器上,用户可以在文本区域中输入文本,其中包括 引用没问题。

看起来你的引号在旧服务器上被自动转义了,可能是因为旧 php 版本中名为Magic Quotes 的设置。

此“功能”已被弃用并删除,无论如何不应依赖它来转义数据库的数据。

您应该切换到 PDO 或 mysqli 并使用带有绑定参数的预处理语句。

【讨论】:

    【解决方案2】:

    出于安全原因,您可能希望在您的数据库中不允许使用非转义引号。使用mysqli_real_escape_string 转义这些字符:\x00, \n, \r, \, ', ", \x1a

    http://php.net/manual/en/mysqli.real-escape-string.php

    【讨论】:

      【解决方案3】:

      在新版本的 mysql 中,查询命令使用 mysqli 而不是 mysql...尝试使用 mysqli_query 代替。如果这不起作用,请确保数据库的名称与查询中的名称匹配。

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-06
        • 2013-11-24
        • 1970-01-01
        • 2021-08-31
        • 2014-10-16
        相关资源
        最近更新 更多