web-dev-qa-db-fra.com

PDO extrait une colonne de la table dans un tableau à 1 dimension

Je connais assez bien PDO et je les amène à travailler avec MySQL. Il semble que je m'entende bien avec l'insertion de nouvelles données et la récupération de résultats individuels, mais je suis coincé avec cela.

J'ai une table qui est composée d'ingrédients, j'essaie de faire tous les ingrédients en un seul tableau.

J'ai lancé la requête directement dans SQL et cela me montre tous les résultats, mais avec PDO, je ne peux pas l'obtenir avec la simple fetch. Lorsque j'utilise l'approche fetchAll comme ci-dessous, tous les résultats sont obtenus, mais dans un tableau multidimensionnel plutôt que juste un tableau.

Existe-t-il une méthode fetch distincte ou dois-je créer une boucle qui ajoute les résultats dans $a[]?

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

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

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

$a = $ingredient_stmt->fetchAll();

Choses que j'ai essayées:

$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.

Toute aide est la bienvenue.

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

vous devez foreach ou while au travers des lignes extraites:

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

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

foreach génère une charge de mémoire plus importante lorsque vous chargez un tableau plus grand, alors que while obtient une ligne à la fois.

remarquez comment utiliser fetch et fetchAll; la première est pour tandis que, en parcourant chaque rangée une à la fois, la dernière est ciblée sur foreach, où le tableau doit être connu à l'avance

1