[PHP-users 28917] Re: DB_common::queryがint(1)を返すのはなぜ
鈴木孝征
takamasa @ thaliana.myhome.cx
2006年 3月 31日 (金) 18:52:51 JST
鈴木です。お返事どうもありがとうございます。
まとめて返事をいたします。
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 メーリングリストの案内