@SergOdinokiy

Как подставить переменные при запросе MySql node.js (Синтаксис)?

Как подставить переменные при запросе?
connection.query("UPDATE `raund_table` SET `round`=1,`activ`=1,`time_in`=1,`time_out`=2,`action_room`=1 WHERE `room`=1000",
        function(err, results) {
            if (err) reject(err);
            resolve(results);
        });
    connection.end();
})


Пытаюсь так через пагинацию. Но не чего не получается:
connection.query("UPDATE `raund_table` SET `round`="+val.raund+",`activ`="+val.act+",`time_in`="+timeUNIX()+",`time_out`=2,`action_room`=1 WHERE `room`=1000",
        function(err, results) {
            if (err) reject(err);
            resolve(results);
        });
    connection.end();
})

Если делаю пигинацию то все остальное становиться строкой а не параметром
9of6eTTrIFE.jpg
  • Вопрос задан
  • 360 просмотров
Решения вопроса 2
Sedbol
@Sedbol
Напрямую подставлять данные нельзя, это может вызыватьsql injectionВ документации (node-mysql, node-mysql2) есть пример, который показывает как подставлять параметры. В вашем случае это будет выглядить так:

// отдельная переменная для читабельность
const sql = "UPDATE `raund_table` SET `round`= ?, `activ`= ?, `time_in`= ?, `time_out`=2, `action_room`=1 WHERE `room`=1000"; 
const params = [val.raund, val.act, timeUNIX()];
connection.query(sql, params,
        function(err, results) {
            if (err) reject(err);
            resolve(results);
        });
    connection.end();
})


Так же я обратил внимания, что вы используете промисы, но оборачиваете функцию самостоятельно. Если использовать node-mysql2, то это делается значительно проще и красивее:
const sql = "UPDATE `raund_table` SET `round`= ?, `activ`= ?, `time_in`= ?, `time_out`=2, `action_room`=1 WHERE `room`=1000"; 
const params = [val.raund, val.act, timeUNIX()];
const [rows,fields] = await connection.query(sql, params);
Ответ написан
Комментировать
mukhindev
@mukhindev
Обратную ковычку запроса ` экранировать \`
Двойные ковычки строки " заменить на обратную `
А переменные вставить так ${}

connection.query(`UPDATE \`raund_table\` SET \`round\`=1,\`activ\`=1,\`time_in\`=1,\`time_out\`=2,\`action_room\`=1 WHERE \`room\`=1000` )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы