gpt4 book ai didi

php - 正则表达式爆炸sql查询

转载 作者:行者123 更新时间:2023-12-02 05:19:49 25 4
gpt4 key购买 nike

我一整天都在为我的问题搜索和寻找解决方案,但找不到任何适合我的问题的东西。我有一个需要通过正则表达式“展开”的查询。我想获取选中的字段,表格和where条件后的字段(不检查本身)。

SELECT `a`, `b`, `c` FROM `d` WHERE `e` > 1 OR `d` > 1

我的尝试如下所示:

/SELECT (?<selectedFields>(,*?)\`(.*?)\`) FROM (?<tableName>\`(.*?)\`) WHERE (?<checkFields>\`(.*?)\`)/

我遇到的问题是正则表达式在 where 条件的第一个字段之后停止。我得到的输出如下所示。

Array
(
[0] => Array
(
[0] => SELECT `a`, `b`, `c` FROM `d` WHERE `e`
)

[selectedFields] => Array
(
[0] => `a`, `b`, `c`
)

[1] => Array
(
[0] => `a`, `b`, `c`
)

[2] => Array
(
[0] =>
)

[3] => Array
(
[0] => a`, `b`, `c
)

[tableName] => Array
(
[0] => `d`
)

[4] => Array
(
[0] => `d`
)

[5] => Array
(
[0] => d
)

[checkFields] => Array
(
[0] => `e`
)

[6] => Array
(
[0] => `e`
)

[7] => Array
(
[0] => e
)

)

我需要“checkFields”在同一种数组中,我得到了选定的字段。我究竟做错了什么?第二件事是正则表达式中的 selectFields 不是预期的每个字段名的数组,它由','...分隔

最佳答案

你不应该用正则表达式解析 sql 查询,因为用正则表达式解析 sql 查询与用正则表达式解析 html 非常相似。和 this answer清楚地说明为什么你不应该这样做。

你最好使用一些解析器(例如 this one )。

小样本:

$sql = 'SELECT `a`, `b`, `c` FROM `d` WHERE `e` > 1 OR `d` > 1';
$sqlParser = new PHPSQLParser($sql);
echo '<pre>';
print_r($sqlParser->parsed);

关于php - 正则表达式爆炸sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com