【发布时间】:2026-01-02 08:35:01
【问题描述】:
对于我的 DBAL,我需要解析提供的 SQL [mysql 方言,特别是] 字符串以查找所有占位符。
但是,当然,我不想解析任何类似占位符的组合,这些组合偶尔可能出现在带引号的文字内部——单引号或双引号或反引号。
说,可能是
SELECT amount as `Amount: boxes` FROM t WHERE q='howdy?' and a='I\'m OK' and category=?
只有最后一个问号是唯一的实际占位符
鉴于大量的转义规则,其中一些取决于当前的数据库设置(NO_BACKSLASH_ESCAPES、ANSI_QUOTES 等),这可以将上述查询变成
SELECT amount as "Amount:boxes" FROM t WHERE q='howdy?' and a='I''m OK' and category=?
我怀疑任务是否可行。
但是,我仍然希望它可以完成,并且可能有人甚至手头有解决方案。
【问题讨论】:
-
对于这项任务来说可能太大了,但您是否考虑过 code.google.com/p/php-sql-parser 而不是正则表达式?
-
我把它作为最后的手段。当然不是像这样的完整 SQL 解析器,但原理相同。然而,似乎 NikiC 处理了它