假设我有以下字符串(忘记它是一个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');
解决方法:
您可以尝试使用这种工具:
http://code.google.com/p/php-sql-parser/
您将获得一个描述查询的树(数组),这将帮助您构建所需的数组.
标签:string-parsing,php,mysql 来源: https://codeday.me/bug/20190827/1737105.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。