我已将网站移动到新服务器,并且无法确定旧服务器为何以正式方式处理后端格式的撇号而新服务器没有(打破sql查询)。
该网站大约12-13岁,非常陈旧,它不使用预备语句或mysql_real_escape_string()
。目前我通过mysql_real_escape_string()
发送用户输入作为临时修复,但我真正的问题是为什么一台服务器处理它的方式与另一台服务器处理方式不同,具有相同的文件和数据库。
环境的差异如下:
旧服务器
mysql: 5.1.72-rel14.10
php: 5.3.29
mysql mode: ""
新服务器
mysql: 5.5.42-cll
php: 5.4.41
mysql mode: ""
数据库是mysqldump
来自旧服务器并添加到新服务器。我已阅读Upgrading from MySQL 5.1 to 5.5指南,但没有发现任何可能存在问题的内容。
我已尝试将sql_mode
设置为包含ANSI
但没有结果。
什么可能导致环境之间的差异?
如果我遗漏了任何重要信息,请告诉我。
更新
Ormoz指出它可能是一个神奇的引号问题,在检查后我发现它确实在旧服务器上启用而不是新服务器。我还看到在PHP 5.4中删除了魔术引号 - 有没有替代全局添加类似功能,或者降级到php 5.3是否是重做每个SQL查询之外的唯一方法?