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