Разница между .query () и .execute () в MySQL - PullRequest
0 голосов
/ 08 ноября 2018

Мне сложно понять реализацию подготовленных заявлений. Я провел немало исследований, но большая часть информации, которую я обнаружил, либо вне контекста, либо содержит примеры, гораздо более сложные, чем то, что я пытаюсь выполнить. Может кто-нибудь объяснить мне, почему метод execute во втором примере ниже выдает синтаксическую ошибку?

ПРИМЕЧАНИЕ. Я здесь использую пакет node-mysql2.

controller.js (используя запрос метод 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 (используя выполнить метод 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' }

1 Ответ

0 голосов
/ 09 ноября 2018

При .query() подстановка параметров выполняется на клиенте, включая объекты, которые let data = req.body находятся в приведенных выше примерах.

При .execute() подготовленные параметры оператора отправляются с клиента в виде сериализованной строки и обрабатываются сервером. Поскольку let data = req.body - это объект, он не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...