[PHP-users 11961] PEAR DB/pgsql.php でのSelect文のコメント

Mashiki php-users@php.gr.jp
Tue, 03 Dec 2002 22:11:45 +0900


Mashikiです。

linux 2.4.9
apache 1.3.27
php 4.2.4 (10/26くらいのもの)
PostgreSQL7.2.3

で開発を行っております。

PEARのDBクラスを使っていて疑問に思ったのですが、

-------------------------
<pre>
<?php
   require_once("DB.php");

   $db = DB::connect("pgsql://postgres@localhost/template1");

   $sql = "
      select /* SQL1 */
         usename, usesysid
      from pg_user
   ";
   $result = $db->Query($sql);
   echo "Result of SQL1\n";
   for ($ii=0; @$data=$result->fetchrow(); ++$ii) {
      list($a, $b) = $data;
      echo "$a, $b\n";
   }
   $result->free();
?>
-------------------------

は期待する結果を返してくれますが、sqlの部分を

   $sql = "/* SQL1 */
      select 
         usename, usesysid
      from pg_user
   ";

のように書き換えると、結果は0件になります。
pg_query()を直接呼ぶ呼び方ではどちらも同じ結果を
返していたので、DB/pgsql.phpを見てみたところ、
simpleQuery()の中で

   if ($ismanip) {
       $this->affected = @pg_cmdtuples($result);
   } elseif (preg_match('/^\s*\(?\s*SELECT\s+/si', $query) &&
            !preg_match('/^\s*\(?\s*SELECT\s+INTO\s/si', $query)) {
         :
        検索処理
         :
   } else {
       $this->affected = 0;
       return DB_OK;
   }

と、行頭にコメントの入ったSelect文は何もせずに終わるように
なっているようです。

#  「SELECT INTO ・・・」文も何もしないように見えます。

他のDB/oci8.phpやDB/mysql.phpは試していませんが、
コードではクエリーを投げてくれるように見えます。

こんな(sql文にコメントを入れてselectするなんて)呼び方を
する自分が悪いのですが、うまく動かなくて残念。

実際の開発ではもう一枚クラスをかぶせて使っていますので、
ログを取った後、文頭のコメントをはがしてから$db->query()に
わたせば何とかなりそうですが...。

とりあえず報告まで。