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