[pgsql-jp: 28943] Re: メッセージの読み込みでエラー

Takao Kato sirius @ jp.fujitsu.com
2003年 2月 5日 (水) 18:07:58 JST


 加藤@川崎です。

なににコメントすれば良いのかって突っ込みは置いておいて、

> Warning: pg_exec() query failed: ERROR: parser: parse error at or near
> "title" in /usr/local/apache/htdocs/kifudb/kekka2.php on line 138
> メッセージの読み込みでエラーが発生しました。

PostgreSQLと言うよりPHPが吐いたエラーに見えるのですが ^^;
まぁそれはさておき、

> $sql = "select * from kifu where $w1 $w2 $w3 $w4 order by nanki";
> 
> としてますが、この行の部分でエラー、ただし今までは動作していました。
> $w1 $w2 $w3 $w4 は別ファイルからglobalで渡し
> 
> if ($w1 != "記入なし"){$w1 = " title like '%$w1%'";}
> elseif($w1 == "記入なし"){$w1 = "";}
> if ($w2 != "記入なし"){$w2 = " title like '%$w2%'";}
> elseif($w2 == "記入なし"){$w2 = "";}
> のようにしてます。

ですと、$w1〜$w4で2つ以上の「記入なし」でない文字列が来た場合、whereの
後ろの変数を展開すると

  select * from kifu where title like '%w1%' title like '%w2%' ...;

となる可能性がありますよね。これですとパースエラーになると思います。
AND なり OR なりでつなぐか、変数の上書きとかしないと駄目でしょう。

それと変数代入ですが、素直に sprintf で変数代入するか . でつなぐかした
方が分かりやすいと思いますよ。
# $w1 = sprintf(" title like '%%%s%%'",$w1); とか
# $w1 = " title like '%".$w1."%'"; とか

それでは
----
加藤@川崎
お便りは kato @ lantc.cs.fujitsu.co.jp まで



pgsql-jp メーリングリストの案内