如果preg_match没有将var更改为false

时间:2014-12-28 07:07:38

标签: php

我一直在研究brett m的“失踪手册”。它过时了。我一直在替换mysql func。那不是问题。我使用preg匹配运行if语句来匹配sql命令。如果我将var设置为true之前。如果preg match返回匹配,则var将更改为false。如果没有运行。脚本执行到mysqli_fetch。请帮忙。

$return_rows=true;
If(preg_match("/^\s*(CREATE|INSERT|UPDATE|DELETE|DROP)/i", $query_text))
{
    $return_rows=false;
}
If($return_rows)
{ 
  While($row=mysqli_fetch_row($result)){ echo $row[0]; }
}
else{ echo "query processed"; }
mysqli_close($u);

2 个答案:

答案 0 :(得分:0)

只需查看SELECT查询即可。 cause SELECT是从数据库请求数据的主要查询。

if( strtolower( substr( trim( $query_str ) ) , 0, 6) == "select"){ 
    // SELECT query is being requested
    while($row=mysqli_fetch_row($result)){ echo $row[0]; }

else{ echo "query processed"; }

mysqli_close($u);

现在,您可以毫无问题地继续工作

答案 1 :(得分:-1)

在其中一种情况下,不使用if仅更新$return_rows,而是直接指定正则表达式匹配结果:

$return_rows = !preg_match("/^\s*(CREATE|INSERT|UPDATE|DELETE|DROP)/i", $query_text);

这里的!是否定的。您可能希望使用更合适的变量名称。

然后使用您的if检查来获取行,或者打印其他消息:

if ($return_rows) {
    // fetch rows
}
else {
    // no fetching
}

另外考虑使用PDO而不是mysqli。参数绑定的方式不那么迂回。