Doctrine DBAL - 带有附加参数的WHERE IN数组

时间:2014-05-08 18:25:18

标签: php mysql doctrine-orm dbal

使用示例文档,我能够获得这样的查询。

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语句,但我还没弄清楚如何使其运行,因为所有示例文档都有数组作为唯一的参数。

2 个答案:

答案 0 :(得分:27)

参数和类型是并行数组。您应该做的就是为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手册了解更多信息。

答案 1 :(得分:13)

我刚刚遇到了以下行为,所以我在这里写,也许这对其他人有用。

使用IN时使用命名参数时要小心。您还必须重复类型数组的名称:

$sql = "SELECT * FROM myTable WHERE name IN (:param_array)";

$stmt = $this->db->executeQuery(
        $sql,
        [
            'param_array' => $paramArray
        ],
        [
            'param_array' => Connection::PARAM_STR_ARRAY
        ]
    );