Doctrine DBAL 2: fetchAll() 不必要的数组维度

2022-08-30 21:42:17

在 doctrine DBAL2 中,当我执行这样的查询时:

<?php
$connection = $this->getDatabaseConnection();

$sql =  "SELECT page_url
           FROM cms_user_page
          WHERE site_id = :siteid
            AND active = '1'
    ";

$stmt = $connection->prepare($sql);
$stmt->bindValue("siteid", $id);
$stmt->execute(); 

return $stmt->fetchAll();
?>

我得到这样的结果:

Array
(
    [0] => Array
        (
            [page_url] => index.php?action=login
        )

    [1] => Array
        (
            [page_url] => index.php?action=shoppingcart
        )

    [2] => Array
        (
            [page_url] => index.php?action=products
        )
)

我的问题是,是否有一种获取模式可以产生这样的结果:

Array
(
    [0] => index.php?action=login

    [1] => index.php?action=shoppingcart

    [2] => index.php?action=products
)

我在文档中找不到有关获取模式的任何信息。我可以做一个数组映射。但在我看来,这是开销。


答案 1

您可以将抓取模式参数传递给 。fetchAll()

$stmt->fetchAll(\PDO::FETCH_COLUMN)

答案 2

此答案已编辑,因为此答案是正确的。

您可以在 fetchAll() 中使用 fetch 模式:FETCH_COLUMN

$stmt->fetchAll(\PDO::FETCH_COLUMN)

正如另一位用户在评论中指出的那样,fetchAll()可以返回以多种有趣格式格式化的数据。

或者你可以用 fetchColumn() 进行迭代:

while($page_url = $stmt->fetchColumn()) { 
    echo $page_url . PHP_EOL;
}

推荐