bindValue不会转义

时间:2011-04-03 02:34:35

标签: php pdo bindvalue

我在php.net上看了评论:

  

虽然bindValue()转义引号但它不会转义为“%”和“_”,因此在使用LIKE时要小心。如果您不自行转义参数,则充满%%%的恶意参数可以转储整个数据库。 PDO没有提供任何其他逃避方法来处理它。

所以它真的没有逃脱%和_?什么是最好的解决方案?

1 个答案:

答案 0 :(得分:2)

正如评论所说,这只是LIKE查询的问题。

这取决于您的数据库如何逃避这些值。如果正常的反斜杠转义有效(如在MySQL中),则使用:

$like = addcslashes($like, "%_");

或者,最好是懒惰,只是剥掉那些元字符:

$like = strtr($like, "%_", "  ");