我试图在执行查询之前验证它们,如果查询不是 mysql select 语句,那么我必须向用户显示消息。
我从此链接找到了以下正则表达式:使用正则表达式验证简单的选择查询 https://stackoverflow.com/questions/6473381/validate-simple-select-query-using-regular-expression
$reg="/^Select\s+(?:\w+\s*(?:(?=from\b)|,\s*))+from\s+\w+\s+where\s+\w+\s*=\s*'[^']*'$/i";
接下来我写了下面的代码,但它总是打印不选择查询($match每次都是空的)
$string="select * from users where id=1";
preg_match_all($reg,$string,$match);
if(!empty($match)){
echo "select query";
//execute and process result
//$this->user_model->list($string);
}else{
echo "not select query";
//show_message('inv_query');
}
请更正正则表达式以验证 sql select 语句(select、from、where、join、orderby groupby 都可以出现在 select 语句中)。
或者让我知道完成任务的其他好方法。
/*
some sample select statements
select * from users where id=1;
select * from users where id=1 AND name= 'Prabhu';
select * from users where id=1 AND name= 'Prabhu' order by name;
Select * from users where id=1 AND name= 'Prabhu' group by id order by name;
Select * from users join role on users.role_id=role.id where id=1 AND name= 'Prabhu' group by id order by name;
*/
为什么不拥有类似的东西:
$reg = "/^(\s*?)select\s*?.*?\s*?from([\s]|[^;]|(['"].*;.*['"]))*?;\s*?$/i";
适用于 SQL 选择查询示例:http://www.phpliveregex.com/p/6nP http://www.phpliveregex.com/p/6nP.
它还检查正在运行的唯一 SQL 查询是否是 select 查询,因此它应该只验证它们。它通过确保只有一个来做到这一点;除非那样;在字符串内,因此下面的内容将验证。
select * from users where id=1 AND name= 'Pra;bhu';
但这不会。
select * from users where id=1 AND name= 'Prabhu'; drop table;
以及不检查 ; 的正则表达式在一个字符串中,如果它在其中就会失败:
$reg = "/^(\s*?)select\s*?.*?\s*?from([\s]|[^;])*?;\s*?$/i"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)