通过 nodejs 尝试 运行 我的 mysql 查询时出现连接问题

Connection issue while trying run my mysql query via 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)时,它会起作用。

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

您似乎正试图将 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) {
});

在最后一个示例中,第一个 ? 替换为 payload 对象,第二个 ?.

替换为 boxName 变量