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