2016-11-21 2 views
0

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

Следовательно, я создал переменную с именем computerName, которая просто извлекает имя хоста компьютера через NodeJs.

var os = require("os"); 
var computerName = os.hostname(); // Detect the computer name associated with the tablet 

Ниже приведен запрос

connection.query("SELECT box_id, longestDimension from box where longestDimension != '' AND LOWER(box_id) = LOWER(computerName)", function(err, rows, fields) { 

computerName кажется проблемой, потому что, когда запрос выполняется с родовым именем, например, как box45 это работает.

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

+0

Зачем вам удаляться сообщение об ошибке, если ваш запрос выполняется? Опубликовать точную ошибку – Shaharyar

+0

Точной ошибкой, которую я получаю, является Ошибка при выполнении запроса. – John

+0

Не могли бы вы опубликовать весь файл или соответствующую часть обработки соединения mysql. Существует несколько возможных проблем. В основном причиной является асинхронное поведение узла. Итак, когда вы закрываете соединение? Когда процесс заканчивается. Может быть, запрос не завершен, когда процесс заканчивается? – Felix

ответ

0

Похоже, вы пытаетесь вставить computerName непосредственно в инструкцию SQL. Как минимум, вы должны были бы написать что-то вроде

connection.query("SELECT box_id, longestDimension from box where longestDimension != '' AND LOWER(box_id) = LOWER('" + computerName + "')", function(err, rows, fields) { 

Но вы должны избежать значение computerName. Вы не знаете, какое значение оно может содержать.

connection.query("SELECT box_id, longestDimension from box where longestDimension != '' AND LOWER(box_id) = LOWER('" + connection.escape(computerName) + "')", function(err, rows, fields) { 

Но лучший способ сделать это с? замена:

connection.query("SELECT box_id, longestDimension from box where longestDimension != '' AND LOWER(box_id) = LOWER(?)", computerName, function(err, rows, fields) { 

Кроме того, если параметры сортировки box_id столбца чувствительны к регистру, который, как правило, по умолчанию, то вы можете пропустить lowercasing значения.

Я бы написать это, для удобства чтения

let sql = "SELECT box_id, longestDimension FROM box WHERE longestDimension != '' AND box_id = ?"; 
connection.query(sql, computerName, function(err, rows, fields) { 

Или, если ваша версия узла поддерживает литералы шаблона

let sql = `SELECT box_id, longestDimension 
      FROM box 
      WHERE longestDimension != '' 
      AND box_id = ?`; 
connection.query(sql, computerName, function(err, rows, fields) { 

Если у вас есть несколько переменных, есть два способа сделать это: с объект или массив. Метод

Объект:

let payload = { 
    box_id: "Johannesburg", 
    longestDimension: 12.4 
}; 
let sql = 'INSERT INTO box SET ?'; 

connection.query(sql, payload, function(err, rows, fields) { 
}); 

метод Массив:

let computerName = "Johannesburg"; 
let longestDimension = 12.4; 
let sql = 'INSERT INTO box SET box_id = ?, longestDimension = ?'; 

// alternative, equivalent SQL statement: 
// let sql = 'INSERT INTO box (box_id, longestDimension) VALUES (?, ?)'; 

connection.query(sql, [ computerName, longestDimension ], function(err, rows, fields) { 
}); 

Вы можете даже объединить их

let payload = { 
    box_id: "Johannesburg", 
    longestDimension: 12.4 
}; 
let boxName = "Box A"; 
let sql = 'UPDATE box SET ? WHERE box_name = ?'; 

connection.query(sql, [ payload, boxName ], function(err, rows, fields) { 
}); 

В этом последнем примере объект полезной нагрузки заменяется на первый ? и переменная boxName заменяется на вторую ? ,

+0

Спасибо за все это. Оно работает. Я считаю, что использую самую последнюю версию узла, но, похоже, это не поддержка, а фактическое в строгом режиме. Точнее, это ошибка, которую я получаю. SyntaxError: объявления с расширенной областью (let, const, function, class) еще не поддерживаются за пределами строгого режима. – John

+0

@ Джон, у вас есть '' use strict '; 'вверху вашего файла? – Dave

+0

Обратите внимание, что это backticks для литерала шаблона, а не обычный символ одиночной кавычки. Ошибка «let, const, ...» звучит так, будто вы не работаете в строгом режиме. В этом случае избегайте литерала шаблона и замените 'var' на' let'. – Dave

Смежные вопросы