Doctrine DBAL - WHERE IN array with additional parameter
问题描述:
使用示例文档,我能够得到像这样的查询来工作。Doctrine DBAL - WHERE IN array with additional parameter
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语句,但我还没有想出如何让它发挥作用,因为所有的示例文档都数组作为唯一参数。
答
参数和类型是并行数组。所有你应该做的就是添加你的占位符f.foo值,并在类型参数中添加正确的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手册以获取更多信息。
答
我刚刚遇到下面的行为,所以我在这里写它,也许它会证明对别人有用。
不能使用命名参数在,所以这段代码不会起作用:
$sql = "SELECT * FROM myTable WHERE name IN (:param_array)";
$stmt = $this->db->executeQuery(
$sql,
[
'param_array' => $paramArray
],
[
Connection::PARAM_STR_ARRAY
]
);
+1
上面谢天谢地现在工作正常,因为至少DBAL 2.6(可能更早) – inanimatt
完美!这正是我想要做的。 – Zoot