Запрос Knex RAW MySQL добавление новых строк

#javascript #mysql #node.js #express #knex.js

Вопрос:

Я новичок в MySQL и ранее использовал PSQL так же, как я использую MySQL, но приведенный ниже код содержит ошибки.

 return await db  .raw(  `INSERT INTO users(firstName,   lastName,   email,   password,   type,  addressLine1,   addressLine2,   addressLine3,   mobileNumber,  townCity,   postcode)  VALUES (  '${firstName}',  '${lastName}',  '${email}',  '${hashedPassword}',   '${mobileNumber}',  ${type},   '${addressLine1}',   '${addressLine2}',   '${addressLine3}',   '${townCity}',   '${postcode}');   SELECT * from users WHERE id = LAST_INSERT_ID()`,  )  .then(() =gt; ...)  

Возвращаем приведенную ниже ошибку.

 code: 'ER_PARSE_ERROR',  errno: 1064,  sqlState: '42000',  sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * from users WHERE id = LAST_INSERT_ID()' at line 24",  sql: 'INSERT INTO users(firstName, n'    ' lastName, n'    ' email, n'    ' password, n'    ' type,n'    ' addressLine1, n'    ' addressLine2, n'    ' addressLine3, n'    ' mobileNumber,n'    ' townCity, n'    ' postcode)n'    ' VALUES (n'    " 'Jane',n"    " 'Doe',n"    " 'janedoe@email.com',n"    " 'password', n"    " '07123456789',n"    ' 100, n'    " '1', n"    " 'Test road', n"    " 'Westminster', n"    " 'London', n"    " 'L1 1TG'); n"    ' SELECT * from users WHERE id = LAST_INSERT_ID()' }  

Я подозреваю, что это связано с литералами шаблона, но не уверен, что лучший способ решить эту проблему, он отлично работал в PSQL (исключая последнюю строку). Есть ли какие-либо лучшие способы использования необработанного SQL, меня не интересуют все команды ORM высокого уровня.

Ответ №1:

Вам необходимо включить мультиплексирование

 const mysql = require('mysql')  connection = mysql.createConnection({  host: 'localhost',  user: 'youruser',  password: 'yourpassword',  database: 'yourdb',  multipleStatements: true }) connection.connect()  connection.query('INSERT INTO users(firstName,   lastName,   email,   password,   type,  addressLine1,   addressLine2,   addressLine3,   mobileNumber,  townCity,   postcode)  VALUES (  '${firstName}',  '${lastName}',  '${email}',  '${hashedPassword}',   '${mobileNumber}',  ${type},   '${addressLine1}',   '${addressLine2}',   '${addressLine3}',   '${townCity}',   '${postcode}');   SELECT * from users WHERE id = LAST_INSERT_ID();', function(err, results) {  if (err) {  throw err  }   console.log(results[0]]) })  connection.end()  

Ответ №2:

Похоже, вы не можете сделать слишком много за один запрос. Извлечение SELECT * from users WHERE id = LAST_INSERT_ID() в свой собственный запрос после того, как вставка сработала нормально

Ответ №3:

Попробуйте выполнить первый запрос отдельно. Если он не был выполнен, проверьте структуру таблицы. Похоже, в структуре отсутствуют настройки первичного ключа или что-то в вашей миграции