问题:PDO bindValue 不允许特定参数通过 (PHP)

我正在将 PHP 与 PDO 一起用于 PostgreSQL。当我尝试将特定值绑定到我的查询中时,我出现了奇怪的行为。我所拥有的是以下内容:

$value[0][$i] = "'%{$filtervalue}%'";
$values[] = & $value[0][$i];
$result = $pdo->prepare($query);
$result->bindValue(':condition', $values[0]);
$result->bindValue(':starts', $start);
$result->bindValue(':pagesize', $pagesize);

现在$query参数返回

SELECT orderDate, shippeddate, shipName, 
shipaddress, shipcity, shipcountry 
FROM orders  WHERE ( shipcity LIKE :condition ) 
LIMIT :pagesize OFFSET :starts 

这正是我想要的。但是问题在于$vales[0]参数,因为$pagesize$start工作正常。

当我使用$vales[0]参数执行时,结果什么也没有返回。

然而,当我改变

$result->bindValue(':condition', $values[0]);

$result->bindValue(':condition', '%Bern%');

它适用于该特定条件并显示结果。

我加倍检查以确保$values[0]返回'%Bern%'并且确实如此。

我什至检查了类型是字符串,它是。

我什至添加了PDO::PARAM_STR仍然没有。

我对它为什么不起作用的想法一无所知。

解答

需要 2 处更改:

$value[0][$i] = "'%{$filtervalue}%'";需要是$value[0][$i] = "%{$filtervalue}%";

$values[] = & $value[0][$i];需要是$values[] = $value[0][$i];

_注意:-_可以直接使用$value[0][$i],不需要创建额外的变量,这样做:

$value[0][$i] = "%{$filtervalue}%";
$result = $pdo->prepare($query);
$result->bindValue(':condition', $value[0][$i]);
$result->bindValue(':starts', $start);
$result->bindValue(':pagesize', $pagesize);
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐