[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()に
わたせば何とかなりそうですが...。
とりあえず報告まで。