mysql-将数组值作为列而不是值进行转义和读取时出现问题

mysql-将数组值作为列而不是值进行转义和读取时出现问题,mysql,Mysql,我有一个疑问: 选择 身份证件 名称 姓氏 从…起 使用者 哪里 名称(??) 然后像这样使用它: 从“/sql/querys”导入{sqlQuerySeenAbove} 异步函数createReport(){ 试一试{ const arrOfStrings=['John','Laura'] const pool=await getConnection() const res=pool.query(sqlQuerySeenAbove,conn.escape(arrOfStrings)) con

我有一个疑问:

选择
身份证件
名称
姓氏
从…起
使用者
哪里
名称(??)
然后像这样使用它:

从“/sql/querys”导入{sqlQuerySeenAbove}
异步函数createReport(){
试一试{
const arrOfStrings=['John','Laura']
const pool=await getConnection()
const res=pool.query(sqlQuerySeenAbove,conn.escape(arrOfStrings))
console.log('res-->',res)
}捕获(e){
控制台日志(e)
}
}
我收到的错误消息是:

“where子句”中的未知列“John”、“Laura”

姓名(`John',`Laura`)\n

我认为问题在于,在这个
()
部分中,mysql正在放置返回标记,以表示它正在查找列而不是值

  • 数组转换为列表,例如,['a','b']转换为'a','b'
还有一个类似于我的查询,因此我不确定问题出在哪里。我知道在文档中,它还表示
用作转义字符的占位符,但是,如果我这样做:

pool.query(sqlquerysenabove,arrOfStrings)
我得到一个错误:

“where子句”中的未知列“John”

注意:我理解转义在安全性方面有它自己的问题,但这是内部使用,所以为了便于讨论,让我们假设我们不担心任何sql注入

我想要的是这个的回报:

/------------------------------------\
| id | name | lastName               |
|------------------------------------|
| 1  | John | Smith                  |
|------------------------------------|
| 2  | John | Doe                    |
|------------------------------------|
| 3  | Laura| Smith                  |
|------------------------------------|
| 4  | Laura| Doe                    |
\------------------------------------/

我的问题是我必须改变两件事:

  • 在查询中,您不使用
    (?)
    仅使用
    (?)
    ,这是因为
    是转义的缩写,因此将查找列名而不是值
  • 在执行命令时,不需要获取连接和转义,原因与上面相同:
    pool.query(sqlQuerySeenAbove,arrOfStrings)
  • arrOfStrings
    需要是一个嵌套数组,因此最终的解决方案是:
    pool.query(sqlqueryseenaove[arrOfStrings])
  • #3的原因是,如果您有多个值,它将遍历该值并搜索该值:

    [['John', 'Laura'], ['Smith', 'Doe']]
    
    mysql将遍历第一个数组,然后遍历第二个数组