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

时间:2014-05-27 20:43:00

标签: php mysql arrays pdo

我是PDO的新手,让他们使用MySQL。我似乎在插入新数据并重新获得单个结果时可以正常运行,但是我坚持这一点。

我有一张由成分组成的桌子,我正在尝试将所有成分组成一个阵列。

我已经将查询直接运行到SQL中,它向我显示了所有结果,但是对于PDO,我只能用fetch得到这个结果。当我使用下面的fetchAll方法时,它给出了所有结果,但是在多维数组中而不仅仅是数组。

是否有单独的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.

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:58)

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

答案 1 :(得分:0)

您必须通过提取的行foreachwhile

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

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

两者都是等价的,foreach在你加载一个更大的数组时产生更大的内存负载,而while一次获得一行

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