[前][次][番号順一覧][スレッド一覧]

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]