奇怪的是,我把一个站点和数据库从一个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。如果这不起作用,请确保数据库的名称与查询中的名称匹配。