SQL在一台服务器上引用生成SQL语法错误,而不是在另一台服务器


SQL Quotes a produce sql syntax error on one server, not another

奇怪的是,我把一个站点和数据库从一个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());

提前感谢您的时间和回复!

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

看起来你的报价在旧服务器上自动转义了,可能是因为旧php版本中有一个名为Magic quotes的设置。

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

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

出于安全考虑,您可能无论如何都不希望在数据库中使用未标注的引号。使用mysqli_real_escape_string转义这些字符:'x00, 'n, 'r, ', ', ", 'x1a

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

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