摘要:在本教程中,您将学习如何从 Node.js 应用程序查询 MySQL 中的表中的数据。
从node.js应用程序查询MySQL数据库中的数据的步骤如下:
- 建立与 MySQL 数据库服务器的连接。
- 执行
SELECT
语句并处理结果集。 - 关闭数据库连接。
执行一个简单的查询
以下 select.js 程序从todoapp
数据库的todos
表中选择所有数据:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
let sql = `SELECT * FROM todos`;
connection.query(sql, (error, results, fields) => {
if (error) {
return console.error(error.message);
}
console.log(results);
});
connection.end();
Code language: JavaScript (javascript)
让我们运行 select.js 程序。
>node select.js
[ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 },
RowDataPacket { id: 2, title: 'Insert a new row with placeholders', completed:0 },
RowDataPacket { id: 3, title: 'Insert multiple rows at a time', completed: 0 },
RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 } ]
Code language: JavaScript (javascript)
它按预期返回 4 行。
将数据传递给查询
以下 select2.js 程序仅选择已完成的待办事项:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
let sql = `SELECT * FROM todos WHERE completed=?`;
connection.query(sql, [true], (error, results, fields) => {
if (error) {
return console.error(error.message);
}
console.log(results);
});
connection.end();
Code language: JavaScript (javascript)
在此示例中,我们使用问号 (?) 作为已完成字段的占位符值。
当我们调用query()
方法时,我们传递了一个数组作为第二个参数。占位符将按顺序替换为数组的值。
>node select2.js
[ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 },
RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 } ]
Code language: JavaScript (javascript)
select2.js 程序返回两行, completed
列为 1,这在 Node.js 中表示true
防止SQL注入
假设您想根据来自命令行参数的 id 查询待办事项,您可能会想出以下代码:
let mysql = require('mysql');
let config = require('./config.js');
let connection = mysql.createConnection(config);
let id = process.argv[2]; // pass argument to query
let sql = `SELECT * FROM todos WHERE id=` + id ;
connection.query(sql, (error, results, fields) => {
if (error) {
return console.error(error.message);
}
console.log(results);
});
connection.end();
Code language: JavaScript (javascript)
让我们选择 id 为 1 的待办事项:
>node select.js 1
[ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 } ]
Code language: JavaScript (javascript)
它工作正常。然而,存在一个问题,即可疑用户可能通过在参数中传递 SQL 代码来利用该程序。
为了防止这种 SQL 注入,您需要像前面的示例一样使用占位符 (?),或者使用mysql
或connection
对象的escape()
方法,如下所示:
let sql = `SELECT * FROM todos WHERE id = ` + mysql.escape(id);
Code language: JavaScript (javascript)
在本教程中,您学习了如何从 Node.js 程序查询 MySQL 数据库中的数据。
本教程有帮助吗?