mysql_escape_string(),长字符串错误,任何替代?

时间:2014-04-23 19:28:02

标签: php mysql

调试服务器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社区的努力

3 个答案:

答案 0 :(得分:3)

增加mysql设置 max_allowed_pa​​cket 解决问题...长字符串导致触及当前限制

答案 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