假设我有以下字符串(忘记它是 MySQL 语句):
SELECT * FROM users WHERE name = 'fred bloggs' AND age=21 AND address='Mountain View, CA 94043' LIMIT 1
我需要一种方法来提取 WHERE 子句中的字段名称和值,所以我有一个像这样的数组:
Array
(
[name] => fred bloggs
[age] => 21
[address] => Mountain View, CA 94043
)
请记住,这是一个动态 MySQL 字符串,所以我不能硬编码姓名、年龄或地址。
我能预见的问题是:
- 查找字段名称时,该函数必须知道所有有效的运算符才能匹配每个字段名称(请参阅下面要使用的数组)
- 不保证空间(例如年龄=21)
- 查找 ' 和 ' 中的值,但当 ' 在字符串中时不中断
- 查找不在 ' 和 ' 中的值,例如数字或其他字段名称(需要单独处理)
有没有人知道如何使用正则表达式或字符串函数来做到这一点?
如果需要,这里是运算符:
$operators = array('+', '-', '*', '/', '^', '=', '<>', '!=', '<', '<=', '>', '>=', 'like', 'clike', 'slike', 'not', 'is', 'in', 'between', 'and', 'or');