0

私は使用するlibを使用しています

$pattern = "LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})";
        $replacement = "";
        eregi($pattern, $query, $regs);
        $query = eregi_replace($pattern, $replacement, $query);

        if($regs[2])
            $query = str_ireplace("SELECT ", "SELECT TOP ".$regs[3]." ", $query);
        else
            {
            if($regs[1])
                $query  = str_ireplace("SELECT ", "SELECT TOP ".$regs[1]." ", $query);
            }

コードの一部を次のように変更します

$pattern = "/LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})/i";
        $replacement = "";
        preg_match($pattern, $query, $regs);

しかし、「未定義のオフセット:2」と「未定義のオフセット:1」というエラーメッセージが表示されるようになりました。

eregiからpreg_matchへの移行は簡単だと思います...

4

1 に答える 1

1

preg_matchまたはpreg_replaceまたは正規表現に問題はありません。

$queryがまったく一致しない場合(例)、このエラーが発生します$query="SELECT foo FROM bar"。次に$regs空の配列であるため$regs[2]、最初から要素が含まれていないため、アクセスするとエラーが発生します。

私はそれをcount($regs)するかどうかを確認するために使用することをお勧めし$regs[2]ます。

$query="SELECT asdf FROM foo";
$pattern = "/LIMIT[^\w]{1,}([0-9]{1,})([\,]{0,})([0-9]{0,})/i";
$replacement = ""; 
preg_match($pattern, $query, $regs);
$query = preg_replace($pattern, $replacement, $query);


if( count($regs)>=0 ) {
    if($regs[2])
    // ... etc the #$egs[2] $regs[1] code here.
}
于 2012-01-13T04:52:32.483 に答える