Doctrine DBAL - 带有附加参数的 WHERE IN 数组
Posted
技术标签:
【中文标题】Doctrine DBAL - 带有附加参数的 WHERE IN 数组【英文标题】:Doctrine DBAL - WHERE IN array with additional parameter 【发布时间】:2014-06-26 07:30:42 【问题描述】:使用示例文档,我能够得到这样的查询。
SELECT
f.foo,
b.bar
FROM Foo f
LEFT JOIN Bar b
WHERE
f.foo = 20
AND b.bar IN ?
使用 DBAL,此代码返回结果。
$result = $this->connection->executeQuery(
$SQL,
array($bar_array),
array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
)->fetchAll();
我想搜索 f.foo 作为单个整数参数以及寻找 IN 语句,但我还没有弄清楚如何让它发挥作用,因为所有示例文档都将数组作为唯一的参数。
【问题讨论】:
【参考方案1】:参数和类型是并行数组。您所要做的就是为 f.foo 值添加占位符,并在 types 参数中添加正确的 PDO 类型。
$SQL = "SELECT f.foo, b.bar
FROM Foo f LEFT JOIN Bar b
WHERE f.foo = ? AND b.bar IN (?)";
$result = $this->connection
->executeQuery($SQL, array($foo, $bar_array),array(
\PDO::PARAM_INT,
\Doctrine\DBAL\Connection::PARAM_INT_ARRAY
))->fetchAll();
您可以read手册了解更多信息。
【讨论】:
【参考方案2】:我只是遇到了下面的行为,所以我在这里写它,也许它会对其他人有用。
在 IN 中使用命名参数时要小心。您还必须重复类型数组的名称:
$sql = "SELECT * FROM myTable WHERE name IN (:param_array)";
$stmt = $this->db->executeQuery(
$sql,
[
'param_array' => $paramArray
],
[
'param_array' => Connection::PARAM_STR_ARRAY
]
);
【讨论】:
谢天谢地,上述内容现在可以正常工作,因为至少 DBAL 2.6(可能更早)以上是关于Doctrine DBAL - 带有附加参数的 WHERE IN 数组的主要内容,如果未能解决你的问题,请参考以下文章
在 Symfony 中使用 Doctrine 的 DBAL 检索布尔值
工匠迁移错误“找不到类'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver'”,