#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:
Попробуйте выполнить первый запрос отдельно. Если он не был выполнен, проверьте структуру таблицы. Похоже, в структуре отсутствуют настройки первичного ключа или что-то в вашей миграции