[PHP-users 19420]SQL文のSELECT項目を変換する正規表現について

k.watanabe k.watanabe @ spclink.com
2003年 12月 19日 (金) 11:56:15 JST


はじめまして、k-wataと申します。

SQL文のSELECT項目をCOUNT(*)に変換する
ということを正規表現でできないかなと考えています。

例としては
「SELECT A, B, C FROM D ・・・」を
「SELECT COUNT(*) FROM D ・・・」
というように。

最初は、
$ret = preg_split( "/(\r\n|\r|\n|\s|\t)/i", $sql);
を実行した結果配列から
「SELECT」と「FROM」の間の配列要素を「COUNT(*)」に変換すればよいと
思っていたのですが、よく考えてみると、

・SELECT A, B, C FROM D ・・・

は良いとして

・SELECT A " FROM " FROM B ・・・
・SELECT ' FROM ' AS A FROM B ・・・
・SELECT (SELECT A FROM B) AS A FROM B ・・・

のSQLだとSELECT文項目中の「FROM」文字列が引っかかり、
意図した結果となりません。

皆様、何か正規表現を使用したスマートなアイデアはないでしょうか?

環境は
Linux + Apache 2.0.48 + PHP 4.3.0
です。

よろしくお願いします。

--
k.watanabe



PHP-users メーリングリストの案内