从Node.js查询MySQL数据库中的数据
时间:2019-11-20 08:52:40 来源:igfitidea点击:
简介:在本教程中,您将学习如何从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();
让我们运行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 } ]
它按预期返回了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();
在本示例中,我们使用问号(?)作为已完成字段的占位符值。
当我们调用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 } ]
select2.js程序返回两行,其中完成的列为1,这意味着在Node.js中为true
防止SQL注入
假设您想根据来自命令行中参数的待办事项查询待办事项,您可能会想到以下代码:
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();
让我们选择ID为1的待办事项:
>node select.js 1 [ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 } ]
它可以正常工作。
但是,存在一个问题,可疑用户可能通过在参数中传递SQL代码来利用程序。
为了防止这种SQL注入,您需要使用上一个示例中的占位符(?),或使用mysql或连接对象的escape()方法,如下所示:
let sql = `SELECT * FROM todos WHERE id = ` + mysql.escape(id);
在本教程中,您学习了如何从node.js程序查询MySQL数据库中的数据。