私はPDOにかなり慣れていないため、MySQLで動作させることができます。新しいデータを挿入して単一の結果を取得することに問題はないようですが、これは行き詰まっています。
材料で構成されたテーブルがあります。すべての材料を1つの配列にしようとしています。
クエリを直接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.
どんな助けでも大歓迎です。
<?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
は一度に1行取得します。
fetch
とfetchAll
の使い方に注意してください。前者はしばらくの間、各行を1つずつ移動し、後者はforeachを対象としています。