Node.js+MySQL查询表数据

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

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

  1. 连接到MySQL数据库,参阅:http://www.yiibai.com/mysql/nodejs-connect.html
  2. 执行SELECT语句并处理结果集。
  3. 关闭数据库连接。

执行一个简单的查询

以下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:\worksp\mysql\nodejs\nodejs-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:\worksp\mysql\nodejs\nodejs-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:\worksp\mysql\nodejs\nodejs-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数据库中的数据。

易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:”教程” 选择相关教程阅读或直接访问:http://m.yiibai.com 。

上一篇:MySQL+Python连接和操作
下一篇:哥,这回真没有了

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • Java技术群: 227270512 (人数:2000,免费:否)
  • MySQL/SQL群: 418407075 (人数:2000,免费:否)
  • 大数据开发群: 655154550 (人数:2000,免费:否)
  • Python技术群: 287904175 (人数:2000,免费:否)
  • 人工智能深度学习: 456236082 (人数:2000,免费:否)
  • 测试工程师(新群): 415553199 (人数:1000,免费:否)
  • 前端技术群(新群): 410430016 (人数:1000,免费:是)
  • C/C++技术(新群): 629264796 (人数:1000,免费:是)
  • Node.js技术(新群): 621549808 (人数:1000,免费:是)
  • PostgreSQL数据库(新群): 539504187 (人数:1000,免费:是)
  • Linux技术: 479429477 (人数:2000,免费:否)
  • PHP开发者: 460153241 (人数:2000,免费:否)
  • Oracle数据库: 175248146 (人数:2000,免费:否)
  • C#/ASP.Net开发者: 579821706 (人数:2000,免费:是)
  • 数据分析师: 397883996 (人数:2000,免费:是)R语言,Matlab语言等技术

发表评论

您的电子邮箱地址不会被公开。