mysql:5967
From: SUGAWARA Hajime <SUGAWARA Hajime <sugawara@xxxxxxxxxx>>
Date: Mon, 19 Aug 2002 13:24:54 +0900
Subject: [mysql 05967] Re: Perl + MySQL でのメタ文字の扱い方
菅原です。 > また > > 当方、 > > $db->do("INSERT INTO $conf{'m_table'} SET no_res=''"); > > このようにINSERTをしているため、すべてを上記のように変更することが > > 大変なため、 > のように、テーブル名にはプレースホルダは使えません。 > quoteでもクォートで囲まれますから、自前でエスケープするしかないでしょ > う。 > MySQLの場合、prepareされたSQLに与えられたバインド値を > quoteして埋め込んで発行するという仕組みなので、ごまかせるかも > しれませんが。 > #テーブル名をユーザ入力でっていうのが本当ならばですが。 マニュアルの6.1.2によると、3.23.6より前のバージョンでは > 名前は、現在の文字セットのアルファベットと数字文字から成り、`_'と`$'も > 含みます。 みたいなので、記号は使えない気がします。 3.23.6以降は > ファイル名として許されるすべての文字。/ と . を除く。 とのことです。 なので、サーバで使っているOSがファイル名として「'」等を許していなけれ ば、それらは使えないでしょう。それに、「/」と「.」はエスケープしても使え ません。 また、 > 規則はMySQL 3.23.6で変更されました。それは識別子(データベース名、テー > ブル名、フィールド名)の ``' でのクォートを導入した時です (ANSIモード > で実行する場合は、" も識別子をクォートするために働きます)。 とのことですので、「`」で括ればエスケープの必要がない*かも*しれません。 エスケープの有無のいずれにしろ、 > 識別子が制限された単語であったり特殊文字を含む場合は、それを使用する時 > には常に ` でクォートする必要があります ですから、常に「`」で括るべきでしょう。 そうでないと、「select」等のテーブル名を作ろうとして、エラーになるでし ょうから。 #もっとも、ユーザーにテーブル名を入れさせる掲示板というのは #どうかなぁと思うのですが……。 ------ 菅原はじめ@ホビー・データ sugawara@xxxxxxxxxx
5957 2002-08-18 21:58 [TATSUYA <tatsuya@xxx] Re: Perl + MySQL でのメタ文字の扱い方 5962 2002-08-19 06:24 ┗["KAWAI,Takanori" <GC] -> 5967 2002-08-19 13:24 ┗[SUGAWARA Hajime <sug]