Php MySQL在一台服务器上存储转义字符,但在另一台服务器上不存储

Php MySQL在一台服务器上存储转义字符,但在另一台服务器上不存储,php,mysql,mysql-real-escape-string,Php,Mysql,Mysql Real Escape String,因此,我有一个非常简单的应用程序,它将数据存储在MySQL数据库中,数据被发布到一个php文件中,然后将其包装在一个MySQL_escape_string()中,然后将其插入数据库 在我本地安装的运行php和mysql的apache上运行良好,但在我的主机帐户上,它存储了任何前面带有\的“和”字符。这两个数据库使用相同的拉丁语1_瑞典语ci字符集,并且都运行相同版本的mysql:5.5.27,但显然表现不同 我对此不知所措。谢谢!正如@njk的评论,很可能您的托管提供商在其PHP环境中启用了神奇

因此,我有一个非常简单的应用程序,它将数据存储在MySQL数据库中,数据被发布到一个php文件中,然后将其包装在一个MySQL_escape_string()中,然后将其插入数据库

在我本地安装的运行php和mysql的apache上运行良好,但在我的主机帐户上,它存储了任何前面带有\的“和”字符。这两个数据库使用相同的拉丁语1_瑞典语ci字符集,并且都运行相同版本的mysql:5.5.27,但显然表现不同


我对此不知所措。谢谢!

正如@njk的评论,很可能您的托管提供商在其PHP环境中启用了神奇的引号。因此,当您的代码看到PHP请求参数时,它们已经包含转义。然后您使用mysql\u real\u escape\u string()将转义应用于\转义字符,结果是文本“\”字符最终出现在数据库中

您可以通过上传一个快速PHP脚本来验证托管PHP环境中的当前设置,该脚本根据结果检查并打印“是”或“否”。您也可以从中查看报告

一般来说,您应该始终将您的开发环境与托管环境的PHP版本和PHP设置相匹配,这样您就可以更可靠地测试代码,确保它在部署时也能正常工作

另一种解决方案是,如果启用了magic quotes,则编写应用程序在运行时有条件地撤消magic quotes。然后像平常一样应用mysql转义。下面是一个指向PHP代码示例的链接,用于在运行时撤消魔术引号:


第三条建议是更换托管提供商。很好,他还没有启用多年前就被弃用的PHP功能。这是没有理由的

我的想法是。您还应该停止使用
mysql\uuuu
函数。就像@njk建议的那样,
mysql()*
从PHP 5.5.0开始就被弃用了,请使用或。您完全正确!谢谢关闭php.ini中的魔术引号,它工作得非常好。我总是忘记那些愚蠢的主持人默认留下的古老的东西。哈哈哈,客户提供了主机。