[PHP-users 28918] Re: DB_common::queryがint(1)を返すのはなぜ

qreen2queen qreen2queen @ yahoo.co.jp
2006年 3月 31日 (金) 21:10:57 JST


DB_OK が 1 なので、 DB_OK が返って来ているのかも。
以下のあたりと、 simpleQuery のあたりにデバッグコードを入れて
追ってみるといいかもしれません。


------- common.php ----------
    function &query($query, $params = array())
    {
        if (sizeof($params) > 0) {
            $sth = $this->prepare($query);
            if (DB::isError($sth)) {
                return $sth;
            }
            $ret =& $this->execute($sth, $params);
            $this->freePrepared($sth, false);
            return $ret;
        } else {
            $this->last_parameters = array();
            $result = $this->simpleQuery($query);
            if ($result === DB_OK || DB::isError($result)) {
                return $result;
            } else {
                $tmp =& new DB_result($this, $result);
                return $tmp;
            }
        }
    }

------- common.php ----------


On Fri, 31 Mar 2006 18:52:51 +0900
鈴木孝征 <takamasa @ thaliana.myhome.cx> wrote:

> 鈴木です。お返事どうもありがとうございます。
> まとめて返事をいたします。
> 
> SUMIYA wrote:
> > 60行程度で改行を入れるのが、ネチケット(古い^^;)だと思いますが。
> 
> すみません、コードの部分が改行はいると読みにくいと思って一行を長くして
> しまいました。
> 
> > prepared statementをお使いのようなので、queryの入れ子をしないで、
> > すべてのqueryの結果を取得してから、次のqueryを実行されてはどうでしょ
> > うか?
> 
> やってみましたが、結果に変わりはありませんでした。特定の検索キーの場合
> にのみ動作に異常がでるので「全部fetchしてからでないと」というのはあて
> はまらないと思います。
> 
> qreen2queen wrote:
> > よく見てませんが、 while 文の {} を省略しないで全部書いてみてはどう
> > でしょう?
> > どこからどこまで while文がかかっているのか読みにくかったので。
> 
> 書き直したものを最後に貼り付けました。おかしなところがあれば教えてくだ
> さい。直したものを実行してみましたが、異常な動作に変わりはありませんで
> した。
> 
> いろいろ試行錯誤した結果、結局テーブルのsampleを取得し、もう一度SQLに
> 渡すということをやめました。ので、私の問題は解決しました。
> 
> しかし、DB_common::queryがint(1)を返す場合についてはいまだ未解決です。
> 
> 以下whileのループの{}を追加してみたバージョン。結果は先のメールと同じ
> でした。
> 
> <?php
> 
> require_once("DB.php");
> $db = DB::connect(array('phptype' => 'pgsql', 'database'
> =>'mydbname')); $db -> setFetchMode(DB_FETCHMODE_ASSOC);
> 
> $pid = 'ME00367';
> 
> $sql = "select name, sample from test where project_id = ?";
> $res_id = $db -> query($sql, $pid);
> while($row = $res_id -> fetchRow()){
>   $res_name = $db -> query("select name from test where name = ?",
> $row['name']); # <-- ここの$res_nameはDB_Resultオブジェクト
>   while($r = $res_name -> fetchRow()){
>     print $r['name']."\n";
>   }
>   print "<hr>\n";
>   var_dump($row['sample']);
>   $res_sample = $db -> query("select sample from test where sample =
>   ?",
> $row['sample']);
> 
>   var_dump($res_sample);		# <-- ここでint(1)と表示される
> 
>   while($r = $res_sample -> fetchRow()){
>     print $r['sample']."\n";
>   }
>   print "<hr>\n";
> }
> 
> ?>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3


--------------------------------------
Celebrate Yahoo! JAPAN 10th Anniversary
http://pr.mail.yahoo.co.jp/10thann/


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