PDO 从表中提取一列到一维数组中

2022-08-30 16:19:09

我对PDO相当陌生,并让他们使用MySQL。我似乎在插入新数据和检索单个结果方面做得很好,但是我坚持了下来。

我有一个由成分组成的桌子,我试图将所有成分制成一个数组。

我已经将查询直接运行到SQL中,它向我显示了所有结果,但是使用PDO,我无法仅通过.当我使用下面的方法时,它给了我所有的结果,但是在一个多维数组中,而不仅仅是一个数组。fetchfetchAll

是否有单独的方法,或者我是否必须创建一个将结果添加到 ?fetch$a[]

$ingredient_q = "SELECT
        `ingredient_name`
         FROM
            `ingredients`
        ";

$ingredient_stmt = $pdo->query($ingredient_q);

$ingredient_stmt ->setFetchMode(PDO::FETCH_ASSOC);

$a = $ingredient_stmt->fetchAll();

我尝试过的事情:

$a = $ingredient_stmt->fetchAll(); // Returns a multidimensional array (not what I want)
$a = $ingredient_stmt->fetch(); // Returns one single result (the first entry)
$a[] = $ingredient_stmt->fetch(); // Returns one single result but in a multidimensional array.

任何帮助将不胜感激。


答案 1
<?php
$sql = "SELECT `ingredient_name` FROM `ingredients`";
$ingredients = $pdo->query($sql)->fetchAll(PDO::FETCH_COLUMN);

答案 2

您必须或通过读取的行:foreachwhile

foreach ($ingredient_stmt->fetchAll() as $row) {
var_dump($row);
}

while ($row = $ingredient_stmt->fetch()) {
var_dump($row);
}

两者都是等效的,当您加载更大的数组时,会生成更大的内存负载,而一次获取一行foreachwhile

注意如何使用和 ;前者是暂时的,一次移动一行,后者的目标是foreach,其中数组必须事先知道fetchfetchAll