Подтвердить что ты не робот

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.

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

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

Ответ 2

вам нужно foreach или while через ваши извлеченные строки:

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

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

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

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