如何在 MySQL (Knex/Bookshelf) 的 JSON 字段中搜索子字符串?
How do I search for a substring in a JSON field in MySQL (Knex/Bookshelf)?
我正在使用 Bookshelf/Knex 作为 ORM。我有一个 MySQL 数据库,其中有一个 table,其中有一个名为 "data." 的 JSON 字段 在该字段内,有一个键 "title" 和一个键"message." 我想 return 在 data.title 或 data.message 中具有子字符串 "searchString" 的所有行。我该怎么做?
这行得通吗?
qb.raw(`data->'title' LIKE ${searchString} OR data->'message LIKE ${searchString}`)
这个有效:
const results = await new Modelname()
.query((qb) => {
qb.whereRaw(
`JSONColumnName->
'$.JSONFieldName' LIKE "%${searchString}%"`)
})
.fetch();
"JSONColumnName" 是 JSON 列的名称,"JSONFieldName" 是该列中某些 JSON 字段的名称。
这是没有SQL注入孔的方法:
const results = await new Modelname()
.query((qb) => {
qb.whereRaw(
`JSONColumnName->
'$.JSONFieldName' LIKE ?`, [`%${searchString}%`])
})
.fetch();
我正在使用 Bookshelf/Knex 作为 ORM。我有一个 MySQL 数据库,其中有一个 table,其中有一个名为 "data." 的 JSON 字段 在该字段内,有一个键 "title" 和一个键"message." 我想 return 在 data.title 或 data.message 中具有子字符串 "searchString" 的所有行。我该怎么做?
这行得通吗?
qb.raw(`data->'title' LIKE ${searchString} OR data->'message LIKE ${searchString}`)
这个有效:
const results = await new Modelname()
.query((qb) => {
qb.whereRaw(
`JSONColumnName->
'$.JSONFieldName' LIKE "%${searchString}%"`)
})
.fetch();
"JSONColumnName" 是 JSON 列的名称,"JSONFieldName" 是该列中某些 JSON 字段的名称。
这是没有SQL注入孔的方法:
const results = await new Modelname()
.query((qb) => {
qb.whereRaw(
`JSONColumnName->
'$.JSONFieldName' LIKE ?`, [`%${searchString}%`])
})
.fetch();