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:
- Thiết lập kết nối đến máy chủ cơ sở dữ liệu MySQL .
- Thực thi một
SELECT
câu lệnh và xử lý tập kết quả. - Đó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ừ todos
bảng của todoapp
cơ 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 completed
cột là 1, nghĩa là true
trong 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]; 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 mysql
hoặc connection
như 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.