调试服务器406 error
时非常糟糕,最后我发现原因是mysql_escape_string
。
看起来这个函数不能处理好的大字符串(> 7685字符),无论如何它没有正确引用html内容。
在函数定义中写道:
- 自5.3.0以来@deprecated,使用mysql_real_escape_string()代替
我在php.net上找不到与使用mysql_real_escape_string()
代替mysql_escape_string()
这里代码部分不能正常工作:
$textQuoted = mysql_escape_string($text);
$sql .= " lower('" . $textQuoted . "') LIKE CONCAT('%', lower(keyword), '%')")
更新
所有这一切都发生在Magento上,即Zend Framework上的继电器。
Magento / Varien / Zend正在使用PDO,所以我尝试使用Varien / Zend Framework提供的quote()
函数,但问题仍然存在。
最后,这个问题与MySql和设置max_allowed_packet
有关,因为它太低了:所以大字符串创建了一个崩溃页面的大SQL查询。
注意
我不知道为什么有人认为这个问题与SQL注入有某种关系......无论如何,这个世界很好,因为每个人都不同。
感谢您对精彩的stackoverflow社区的努力
答案 0 :(得分:3)
增加mysql设置 max_allowed_packet 解决问题...长字符串导致触及当前限制
答案 1 :(得分:1)
不推荐使用所有mysql_*()
个功能,包括mysql_real_escape_string()
:
警告自PHP 5.5.0起,此扩展程序已弃用,将来将被删除。相反,MySQLi或PDO_MySQL扩展 应该使用。另请参阅MySQL:选择API指南和相关的常见问题解答 欲获得更多信息。该功能的替代方案包括: mysqli_real_escape_string()PDO :: quote()
所以最简单的(从程序重新分解的角度来看)是使用mysqli_*()
函数并使用mysqli_real_escape_string()
。
答案 2 :(得分:-1)
mysql_real_escape_string()是我在php中清理查询的首选方法。
请查看此here。