これが些細な質問である場合は事前にお詫びしますが、PHPマニュアルを確認したところ、複数の行をフェッチすることについて少ししか見つけられないようです(問題はありません)。以下のコードを検討してください。
$fetch = $db->prepare("
SELECT col1, col2
FROM table
WHERE col0 = '1'
");
$fetch->execute();
//SQL request made, returns 1 row, 2 columns
echo $fetch->fetchColumn(); //perfect
echo $fetch->fetchColumn(1); //doesn't work
//only one column can be fetched per SQL request
PDO についての私の限られた理解から、次のようなことをする必要があります。
$fetch->execute(); //execute 1st time
echo $fetch->fetchColumn(); //perfect
$fetch->execute(); //execute 2nd time
echo $fetch->fetchColumn(1); //perfect
//or
$fetch->execute(); //execute only once
foreach($fetch as $fetcher) {} //ugly
echo $fetcher["col1"]; //perfect
echo $fetcher["col2"]; //perfect
最初の方法は遅いですが、2 番目の方法は精巧さに欠けます。ロジックをループ内に配置できることはわかっていforeach()
ますが、見た目が少しきれいになる以外は、リクエストが 1 行しか返さないため (1foreach()
回だけ反復されます)、同じことを行います。
効率化だけなら、できるだけSQL負荷を減らしたい。実際の処理の違いは、1000 分の 1 秒の長さです。しかし、私はコードをクリーンで簡潔にしたいとも思っています。