PDO извлекает один столбец из таблицы в одномерный массив

Я довольно новичок в PDO и заставляю их работать с MySQL. Кажется, я все хорошо себя чувствую, добавляя новые данные и извлекаю одиночные результаты, но это я застрял.

У меня есть таблица, состоящая из ингредиентов, я пытаюсь сделать все ингредиенты единым массивом.

Я запускаю запрос непосредственно в SQL, и он показывает мне все результаты, но с PDO я не могу получить это с помощью только fetch . Когда я использую метод fetchAll как 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. 

Любая помощь будет оценена.

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

вы должны выполнить foreach или while через ваши извлеченные строки:

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

оба являются своего рода эквивалентными, foreach генерирует большую нагрузку на память при загрузке большего массива, тогда как while получается одна строка

обратите внимание, как использовать fetch и fetchAll ; первая предназначена для того, чтобы перемещаться по каждой строке по одной, последняя нацелена на foreach, где массив должен быть известен заранее