繁体   English   中英

无法使用bindValue,Postgresql在Doctrine DBAL中绑定字符串值

[英]Cannot bind string value in Doctrine DBAL using bindValue, Postgresql

我正在尝试在我的项目中使用Doctrine DBAL; 我的数据库是Postgresql。 这是一个简单的用例,我真的不知道为什么这不起作用。

$query = "SELECT * FROM table ORDER BY field :order LIMIT :amount";

我们假设:

$order = 'DESC' and $amount = 'ALL';

上面的代码似乎没问题。

$statement = $app['db']->prepare($sql);
$statement->bindValue('order', $order);
$statement->bindValue('amount', $amount);
$statement->execute();

我收到此错误:

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1"
LINE 1: SELECT * FROM table ORDER BY field $1 LIMIT $2

有人可以解释这种行为吗? 我怀疑引用问题......

最好的Regrards
卡米尔

你可能会错过昏迷吗?

SELECT * FROM table ORDER BY field, :order LIMIT :amount

(顺便说一句,你应该真的使用模拟的预处理语句来做这样的事情。如果没有这样做,顺序by / limit子句基本上保证你最终会在整个地方进行seq扫描。)

好的,我想通了。

SQL语言的一部分不能用作预准备语句中的参数。 所以应该使用某种条件来创建这样的查询:

$sql = 'SELECT * FROM table ORDER BY field ';
if ($order = 'ASC') {
  $sql .= 'ASC ';
} else ... {
  ...
}
$sql .= 'LIMIT :amount';

现在一切都应该有效。
并且昏迷后的参数被视为所有查询共有的参数,并且不起作用。 它可能是一切,它对结果没有影响。
我认为线程可以关闭......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM