如何使用正则表达式向查询添加参数化字符串

时间:2019-09-29 10:14:11

标签: mysql sql node.js

我有一个JSON列,其中可能包含字符串"attribute":"my_value"(以及其他JSON属性),这是我必须搜索的查询:

SELECT 1 
FROM TABLE 
WHERE JSON_COLUMN REGEXP '"attribute":"?"'

execQuery函数在参数化的字符串中添加撇号,这是运行的查询:

SELECT 1 
FROM TABLE 
WHERE JSON_COLUMN REGEXP '"attribute":"'my_value'"'

这不是有效的SQL查询,如何搜索此参数以获取与此值匹配的行?

我在mysql中为nodejs(5.6)使用orm package,这是我的用法:

execQuery(MY_QUERY, [param1], (err, data) => {
            if (err) {
                return reject({
                    error: 'cannotFetch',
                    message: err
                });
            } else {
                return resolve(data);
            }
        })

3 个答案:

答案 0 :(得分:2)

如果您有JSON列,为什么不提取值呢?

WHERE JSON_COLUMN->'$.attribute' = 'myvalue' 

答案 1 :(得分:2)

您可以使用JSON_EXTRACT在where子句中使用JSON列

WHERE JSON_EXTRACT(JSON_COLUMN, "$.attribute") = 'myvalue'

编辑:

如果使用mysql 5.6或更低版本,则必须使用REGEXP

WHERE  `JSON_COLUMN` REGEXP  '"attribute":[^}]*"my_value"[^}]*}'

db-fiddle

答案 2 :(得分:0)

我最终使用了以下查询:

<p > < /p >

并注意const MY_QUERY = `SELECT 1 FROM TABLE WHERE JSON_COLUMN REGEXP ?`; 部分中的动态值:

nodejs

这是我为const getAttributeUsageTemplate = value => (`"attribute":"${value}"`); execQuery(MY_QUERY, [getAttributeUsageTemplate(param1)], (err, data) => { }) 版本找到的唯一解决方案
驱动程序仍然用撇号将参数括起来,但是它们不会妨碍正则表达式