2

これが些細な質問である場合は事前にお詫びしますが、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 秒の長さです。しかし、私はコードをクリーンで簡潔にしたいとも思っています。

4

1 に答える 1