【发布时间】:2011-12-21 00:05:28
【问题描述】:
我觉得我要疯了……
我尝试了很多组合,但我无法找到好的组合。
在使用file_get_contents() 阅读后,我需要在 PHP 代码中找到所有 SQL 查询。
当然,所有这些查询都是变量赋值,例如:
$sql1 = "
SELECT *
FROM users u
WHERE u.name LIKE '%".$name."%' AND ... ;
";
或
$sql2 = "
SELECT *
FROM users u
WHERE u.id = ".$user_id;
或
$sql3 = '
SELECT *
FROM users u
ORDER BY u.surname1 DESC
'; //this query blablabla.......
因此您可以看到 PHP 变量需要考虑的因素很多。
首先,我尝试了基于获取变量本身和获取它的内容的近似值...
我也尝试在正则表达式模式中从 SQL 中查找特定单词...
随便...
我不知道该怎么做。
获取所有变量及其赋值,对赋值进行分组,然后在它之后循环匹配搜索特殊 SQL 词(这就是我现在所拥有的,但它不起作用导致赋值正则表达式部分)。
直接搜索具有良好正则表达式的 SQL 查询?
PHP 变量(特别是字符串),包含与其他变量的部分连接,双引号和单引号字符串,“;”末尾的 cmets还是在中间……
那我该怎么办?
到目前为止,这是我的变量正则表达式部分:
$regex_variable = '\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*[\+\-\*\/\%\.\&\|\^\<\>]*=\s*';
我将它与我尝试过不同形式的 $regex_sql 连接起来:
//$regex_sql = '(["\'])(.*?)\2\s*;';
//$regex_sql = '(["\'])([^;]*?)\2\s*;';
//$regex_sql = '(?<!")\b\w+\b|(?<=")\b[^"]+';
//$regex_sql = '([^;]+)(?<=["\']);(?!["\'])';
//$regex_sql = '(.*?;)[^\\$]*';
这些都不能正常工作。
你能帮帮我吗?我确信最好的近似值是获取所有变量本身,然后测试分配是否包含一些特殊的 SQL 单词,如 SELECT、WHERE、UNION、ORDER、...
提前非常感谢!
标记。
编辑:
当然,要补充一点,带有查询的变量可以有任何形式。以上只是简单的例子。
我们谈论的是这样的事情:
$s = 'insert into tabletest(a,b,c) values('asd','r32r32','fdfdf')';
或
$where = 'where a=2';
$sql="select distinct * from test ".$where;
或
$a = '
select *
from users
left outer join ...
inner join ...
left join ...
where ...
group by ...
having ...
order by ...
limit ...
...
';
或
...
想象一下很多程序员,在代码中创建查询,每个人都以自己的方式做...:\
我必须得到所有这些。至少,最大化结果... ^^'
【问题讨论】:
标签: php regex variables variable-assignment