+150 votes
,post bởi (2.6k điểm)

Tóm tắt : trong hướng dẫn này, bạn sẽ học cách truy vấn dữ liệu từ một bảng trong MySQL từ ứng dụng node.js.

Các bước truy vấn dữ liệu trong cơ sở dữ liệu MySQL từ ứng dụng node.js như sau:

  1. Thiết lập kết nối đến máy chủ cơ sở dữ liệu MySQL .
  2. Thực thi một SELECTcâu lệnh và xử lý tập kết quả.
  3. Đóng kết nối cơ sở dữ liệu.

Thực hiện một truy vấn đơn giản

Chương trình select.js sau đây chọn tất cả dữ liệu từ todosbảng của todoappcơ sở dữ liệu:

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

Ngôn ngữ mã: JavaScript ( javascript )

Hãy chạy chương trình 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 } ]

Ngôn ngữ mã: JavaScript ( javascript )

Nó trả về 4 hàng như mong đợi.

Truyền dữ liệu cho truy vấn

Chương trình select2.js sau đây chỉ chọn những việc cần làm đã hoàn thành:

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

Ngôn ngữ mã: JavaScript ( javascript )

Trong ví dụ này, chúng tôi đã sử dụng dấu chấm hỏi (?) làm giá trị giữ chỗ của trường đã hoàn thành.

Khi chúng tôi gọi query()phương thức, chúng tôi đã chuyển một mảng làm đối số thứ hai. Các trình giữ chỗ sẽ được thay thế bằng các giá trị của mảng theo trình tự.

>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 } ]

Ngôn ngữ mã: JavaScript ( javascript )

Chương trình select2.js trả về hai hàng với completedcột là 1, nghĩa là truetrong Node.js

Ngăn chặn SQL injection

Giả sử, bạn muốn truy vấn một việc cần làm dựa trên id của nó xuất phát từ đối số trong dòng lệnh, bạn có thể nhập đoạn mã sau:

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

Ngôn ngữ mã: JavaScript ( javascript )

Hãy chọn việc cần làm với id 1:

>node select.js 1 [ RowDataPacket { id: 1, title: 'Learn how to insert a new row', completed: 1 } ]

Ngôn ngữ mã: JavaScript ( javascript )

Nó hoạt động chính xác. Tuy nhiên, có một vấn đề là người dùng đáng ngờ có thể khai thác chương trình bằng cách chuyển mã SQL vào đối số.

Để ngăn việc tiêm SQL này, bạn cần sử dụng trình giữ chỗ (?) như trong ví dụ trước hoặc sử dụng escape()phương thức của đối tượng mysqlhoặc connectionnhư sau:

let sql = `SELECT * FROM todos WHERE id = ` + mysql.escape(id);

Ngôn ngữ mã: JavaScript ( javascript )

Trong hướng dẫn này, bạn đã học cách truy vấn dữ liệu trong cơ sở dữ liệu MySQL từ chương trình node.js.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
Anti-spam verification:
To avoid this verification in future, please log in or register.
...