我使用的是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应该很容易。
发布于 2012-01-13 12:52:32
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.
}https://stackoverflow.com/questions/8845999
复制相似问题