[PHP-users 29301] Re: PDO の使い方

Takashi Tomokuni ttsan2000 @ gmail.com
2006年 5月 25日 (木) 22:07:23 JST


T_Tsan です。
初めての回答です。
よろしくお願いします。

> <?php
> 
> $dbh = new PDO(PDO_DSN, DB_USER, DB_PASSWORD);
> 
> $querySentence1 = "SELECT id FROM first_table";
> 
> $statement1 = $dbh->prepare($querySentence1);
> if ($statement1->execute()) {
> 
>     while ($queryValue =
> $statement1->fetch(PDO::FETCH_ASSOC)) {
> 
>         $querySentence2 = "SELECT data FROM second_table
> WHERE id = {$queryValue['id']} LIMIT 1";
>         //$querySentence2 = "SELECT data FROM second_table
> WHERE id = :id LIMIT 1";
>         $statement2 = $dbh->prepare($querySentence2);

この部分ですが、前回の fetch が終了していないのに次のクエリは実行できません。
するなら fetchAll で全てデータを取り出してからになります。
全てデータを取り出すときは fetch を回すよりも fetchAll で取り出す方がいいと思います。

次に、クエリを見ると
> $querySentence1 = "SELECT id FROM first_table";
> $querySentence2 = "SELECT data FROM second_table WHERE id = {$queryValue['id']} LIMIT 1";
となっていますので、クエリを見直した方がいいです。
結合を使うと何も考えずに取り出せるはずです。


PHP-users メーリングリストの案内