node查询mysql数据_Node.js+MySQL查询表数据

本文介绍了如何在Node.js应用程序中连接到MySQL数据库并执行查询。通过创建连接、执行SQL语句并处理结果集,展示了从todos表中选择数据的过程。示例代码包括选取所有数据和基于条件过滤数据,同时讨论了防止SQL注入的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本教程中,您将学习如何从node.js应用程序中查询MySQL中的表中的数据。

从node.js应用程序查询MySQL数据库中的数据的步骤如下:

连接到MySQL数据库,参阅:

执行语句并处理结果集。

关闭数据库连接。

执行一个简单的查询

以下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();

执行上面代码,得到以下结果 –

F:workspmysqlnodejsnodejs-connect>node select.js openssl config failed: error:02001003:system library:fopen:No such process [ 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 }, RowDataPacket { id: 5, title: 'Insert multiple rows at a time', completed: 0 }, RowDataPacket { id: 6, title: '现在学习一次插入多行记录(by www.yiibai.com)', completed: 1 }, RowDataPacket { id: 7, title: 'It should work perfectly', completed: 1 } ]

它按预期返回7行。

#将数据传递给查询

以下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();

执行上面代码,得到以下结果 –

F:workspmysqlnodejsnodejs-connect>node select2.js openssl config failed: error:02001003:system library:fopen:No such process [ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 }, RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 }, RowDataPacket { id: 6, title: '现在学习一次插入多行记录(by www.yiibai.com)', completed: 1 }, RowDataPacket { id: 7, title: 'It should work perfectly', completed: 1 } ]

在这个例子中,我们使用问号(?)作为completed字段的占位符值。

当我们调用query()方法时,传递一个数组作为第二个参数的值,占位符将被序列的值替换。

select2.js程序返回两行,其中completed列为1,这意味着在Node.js中为true。

防止SQL注入

假设你想根据命令行中的参数的id来查询一个todo,可以使用以下代码(select3.js):

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();

执行上面示例代码,得到以下结果 –

F:workspmysqlnodejsnodejs-connect>node select3.js 1 openssl config failed: error:02001003:system library:fopen:No such process [ 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数据库中的数据。

¥ 我要打赏 纠错/补充 收藏

哥,这回真没有了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值