[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 メーリングリストの案内