所以我有一个非常简单的应用程序将数据存储在MySQL数据库中,数据被发布到一个php文件,然后将其包装在mysql_escape_string()中,然后将其插入到数据库中。
在我运行php和mysql的apache的本地安装上它工作正常但在我的主机帐户上它存储任何'和'字符与\前面。两个数据库使用相同的latin1_swedish_ci字符集,并且两者都运行相同的版本mysql:5.5.27但显然表现不同。
我对此感到茫然。谢谢!
答案 0 :(得分:2)
正如@njk评论,您的托管服务提供商可能在其PHP环境中启用了魔术引号。因此,PHP代码请求参数在代码看到它们时已经包含了转义。然后使用mysql_real_escape_string()将转义应用于“\”转义字符,结果是文字“\”字符最终出现在数据库中。
您可以通过上传快速PHP脚本来验证托管PHP环境中的当前设置,该脚本检查get_magic_quotes_gpc()并根据结果打印“是”或“否”。您还可以从phpinfo()查看报告。
一般情况下,您应始终将开发环境与托管环境的PHP版本和PHP设置相匹配,这样您就可以更加确保在部署时它的工作原理相同,从而测试您的代码。
另一种解决方案是编写应用程序,以便在运行时有条件地撤消魔术引号,如果启用了魔术引号。然后像往常一样应用mysql转义。这是一个PHP代码示例的链接,用于在运行时撤消魔术引号:http://php.net/manual/en/security.magicquotes.disabling.php
第三条建议是切换主机提供商。很好的人还没有启用PHP的岁月,已弃用的功能。这没有任何借口!