bindValue 不会转义

发布于 2024-10-29 02:28:27 字数 237 浏览 1 评论 0原文

我在 php.net 上读到一条评论:

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

那么它真的没有转义 % 和 _ 吗?对此最好的解决方案是什么?

I read a comment at php.net:

Although bindValue() escapes quotes it does not escape "%" and "_", so be careful when using LIKE. A malicious parameter full of %%% can dump your entire database if you don't escape the parameter yourself. PDO does not provide any other escape method to handle it.

So is it really doesn't escape the % and _ ? What could be the best solution for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与酒说心事 2024-11-05 02:28:27

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

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

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

或者,最好偷懒,直接删除这些元字符:

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

As the comment says, it's really only an issue for LIKE queries.

It depends on your database on how you have to escape those values. If normal backslash escaping works (as in MySQL), then use:

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

Alternatively it's probably best to be lazy and just strip those meta characters out:

$like = strtr($like, "%_", "  ");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文