我有一个查询,我正在尝试运行查询。我认为的问题是,我添加了一个条件,即数据库列中的项必须等于用户的计算机名。
因此,我创建了一个名为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/