Я довольно новичок в 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, где массив должен быть известен заранее