我有一个查询,我正在尝试运行查询。我认为的问题是,我添加了一个条件,即数据库列中的项必须等于用户的计算机名。

因此,我创建了一个名为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)运行查询时,它可以工作。

我收到连接错误。我想更好的问题是如何在查询中包含定义的变量

最佳答案

似乎您正在尝试将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列的排序规则不区分大小写(通常是默认设置),则可以跳过小写的值。

为了方便阅读,我会这样写

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变量替换了第二个?

关于mysql - 尝试通过Node.js运行我的MySQL查询时出现连接问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40728416/

10-16 07:06
查看更多