【发布时间】:2011-04-03 02:34:35
【问题描述】:
我在 php.net 上看到了一条评论:
虽然
bindValue()会转义引号,但不会转义“%”和“_”,所以在使用LIKE时要小心。如果您不自己转义参数,则充满 %%% 的恶意参数可以转储您的整个数据库。 PDO 没有提供任何其他转义方法来处理它。
那么它真的没有逃脱 % 和 _ 吗?最好的解决方案是什么?
【问题讨论】:
我在 php.net 上看到了一条评论:
虽然
bindValue()会转义引号,但不会转义“%”和“_”,所以在使用LIKE时要小心。如果您不自己转义参数,则充满 %%% 的恶意参数可以转储您的整个数据库。 PDO 没有提供任何其他转义方法来处理它。
那么它真的没有逃脱 % 和 _ 吗?最好的解决方案是什么?
【问题讨论】:
正如评论所说,这实际上只是LIKE 查询的问题。
如何转义这些值取决于您的数据库。如果正常的反斜杠转义有效(如在 MySQL 中),则使用:
$like = addcslashes($like, "%_");
或者,最好是偷懒,把那些元字符去掉:
$like = strtr($like, "%_", " ");
【讨论】: