-2

我在 PHP 中有这一行,它正在 PDO 中构建查询参数:

$p[':criteria'] = '%' . $search . '%';

有问题的 MySQL 行如下所示:

d.d_name LIKE :criteria

问题是如果我在 $search 中输入一个数字,它会将它转换为一个字符。例如,如果我将 $search 设置为:

6008

我希望它是:

%6008%

但我得到的是:

`08%

看起来它是对第一个 2 个字符进行 % 编码。我尝试使用 urldecode() 来还原它,但它没有用。它将字符串保持为 08%。

我怎样才能阻止这种情况发生?

4

3 回答 3

0

这只是一种错觉。您正在尝试使用不适当的工具(例如浏览器)来查看您的查询。这个工具做了一些转换。与 SQL 的东西完全无关。

而对于数据库,您的查询保持完全相同。任何转换都没有一个问题。只需运行您的查询并获得结果。

于 2016-05-06T20:45:36.797 回答
0

绑定机制太通用了,因为它必须处理许多类型,并且有一些像这样的边缘情况。

因此,在这种情况下,不要使用绑定,而是将查询挂载为字符串:

$sql = "...whatever d.d_name LIKE '%" . $search . "%'";

调试 $search 以确保它在连接之前没有任何引号或任何内容。如果它有修剪或类似的东西。

由于 sql-injection 攻击,还要确保正确验证 $search。

于 2016-05-06T21:15:13.423 回答
-1

我建议您阅读有关字符串转义的内容,它可能会帮助您解决此问题,并且还可以了解一些编程基础知识。

于 2016-05-06T21:28:33.810 回答