node.js—mysql中.query()和.execute()的区别

jgovgodb  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(936)

我很难理解事先准备好的声明的执行情况。我做了大量的研究,但我发现的大部分信息要么是断章取义,要么包含的例子比我要完成的要复杂得多。有人能解释一下为什么下面第二个示例中的execute方法抛出语法错误吗?
注意:我在这里使用node-mysql2包。
controller.js(使用query mysql方法)

const db = require("../lib/database");

  async addNewThing(req, res, next) {

    let data = req.body

    const queryString = 'INSERT INTO table SET ?'
    try {
      await db.query(queryString, data)
      res.status(201).json({
        message: 'Record inserted',
        data
      })
    } catch (error) {
      next(error)
    }
  }

记录已成功插入数据库
controller.js(使用execute mysql方法)

const db = require("../lib/database");

  async addNewThing(req, res, next) {

    let data = req.body

    const queryString = 'INSERT INTO table SET ?'
    try {
      await db.execute(queryString, [data])
      res.status(201).json({
        message: 'Record inserted',
        data
      })
    } catch (error) {
      next(error)
    }
  }

导致以下错误:
sql语法有错误;请查看与mysql服务器版本对应的手册,以获取在第1行的“?”附近使用的正确语法
数据

{ thing_id: '987654', thing_name: 'thing' }
wwodge7n

wwodge7n1#

.query() ,在客户端上处理参数替换,包括 let data = req.body 在上面的例子中。
.execute() 准备好的语句参数作为序列化字符串从客户端发送,并由服务器处理。自 let data = req.body 是一个物体,那是行不通的。

相关问题