[PHP-users 29300] PDO の使い方

onodera takumi takkjoga @ yahoo.co.jp
2006年 5月 25日 (木) 21:13:05 JST


いつも参考にさせていただいております。
小野寺と申します。

PDO の使い方について悩んでいる点がありまして、皆様のご指
導を受けたいと思っております。

<?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);

        var_dump($statement2); // false

        if ($statement2->execute()) { // Fatal error: Call
to a member function execute() on a non-object in
/path/to/test.php on line 18
        //if ($statement2->execute(array(':id' =>
$queryValue['id']))) {
            $data = $statement2->fetchColumn();
            $statement2->closeCursor();
            unset($statement2);
        }
    }
}


上記のように、1つの SELECT 文の検索結果のループ内に、結
果から得たデータを使用したもう1つの SELECT 文を発行しよ
うと思ったのですがうまく行きません。

<?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)) {
        $queryArray[] = $queryValue;
    }

    foreach ($queryArray as $count => $queryRecord) {
        $querySentence2 = "SELECT data FROM second_table
WHERE id = {$queryRecord['id']} LIMIT 1";
        $statement2 = $dbh->prepare($querySentence2);

        var_dump($statement2); // false

        if ($statement2->execute()) { // Fatal error: Call
to a member function execute() on a non-object in
/path/to/test.php on line 17
            $data = $statement2->fetchColumn();
            $statement2->closeCursor();
            unset($statement2);
        }
    }
}

このようにしてループの外で、別のループを発生させるとうま
くいきます。

確か Mysqli などでは最初のような方法でうまくいったと思う
のですが、PDO だとこれは認められていないのでしょうか?

また、メソッドの Typo などで Web ページが表示されなくな
ったり、よくおかしな挙動を示されるのは私の環境だけなので
しょうか?
まだ Google の方でもあまり話題になっていないようなので気
になっております。

現在の動作環境は、
apache-2.2
php-5.1.4
mysql-5.0
centos-4.3

configure option は、
./configure \
--enable-mbstring \
--enable-mbregex \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-zlib \
--with-gd \
--with-curl \
--enable-gd-native-ttf \
--with-freetype-dir=/usr \
--with-png-dir=/usr \
--with-jpeg-dir=/usr \
--enable-exif \
--without-sqlite \
--without-pdo-sqlite \
--without-iconv \
--with-openssl \
--no-create \
--no-recursion
です。余計なものも何かとありますが…

まだまだ若輩者の質問なのでわかりづらい文章になっているか
もしれませんが、何卒ご指導よろしくお願いいたします。


--------------------------------------
Yahoo! JAPAN 10th Anniversary Special Feature
--- Enjoy Yahoo! Auction with Yahoo! Mail !! ---
http://pr.mail.yahoo.co.jp/auction/


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