Node.js: WHERE

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Khi chọn bản ghi từ một bảng, bạn có thể lọc lựa chọn bằng cách sử dụng câu lệnh "WHERE":

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "nodejs_db"
});

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers WHERE address = 'Hà Nội'", function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Lưu mã ở trên vào một tệp có tên "demo_db_where.js" và chạy tệp:

C:\Users\Your Name>node demo_db_where.js

Kết quả:

[
  RowDataPacket { name: 'V1Study', address: 'Hà Nội', id: 1 },
  RowDataPacket { name: 'Long', address: 'Hà Nội', id: 2 },
  RowDataPacket { name: 'Minh', address: 'Hà Nội', id: 5 }
]

Ký tự đại diện

Bạn cũng có thể chọn các bản ghi bắt đầu, bao gồm hoặc kết thúc bằng một chữ cái hoặc cụm từ nhất định.

Sử dụng ký tự đại diện '%' để đại diện cho không, một hoặc nhiều ký tự.

Ví dụ sau sẽ chọn các bản ghi có địa chỉ kết thúc bằng chữ 'm':

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "nodejs_db"
});

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM customers WHERE address LIKE '%m'", function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Lưu mã ở trên vào một tệp có tên "demo_db_where_i.js" và chạy tệp:

C:\Users\Your Name>node demo_db_where_i.js

Kết quả:

[ RowDataPacket { name: 'Phương', address: 'Hà Nam', id: 3 } ]

Thoát giá trị truy vấn

Khi các giá trị truy vấn là các biến do người dùng cung cấp, bạn nên thoát khỏi các giá trị.

Điều này là để ngăn chặn SQL injection, đây là một kỹ thuật tấn công web phổ biến để phá hủy hoặc sử dụng sai cơ sở dữ liệu của bạn.

Mô-đun mysql có phương thức escape() để thoát các giá trị truy vấn như ví dụ sau:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "myusername",
  password: "mypassword",
  database: "nodejs_db"
});

con.connect(function(err) {
  if (err) throw err;
  var adr = 'Hà Nam';
  //thoát khỏi giá trị địa chỉ:
  var sql = 'SELECT * FROM customers WHERE address = ' + mysql.escape(adr);
  con.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Lưu đoạn code trên vào file có tên "demo_db_escape.js" và chạy file:

C:\Users\Your Name>node demo_db_escape.js

Kết quả:

[ RowDataPacket { name: 'Phương', address: 'Hà Nam', id: 3 } ]

Bạn cũng có thể sử dụng ? làm trình giữ chỗ (placeholder) cho các giá trị bạn muốn thoát.

Trong trường hợp này, biến được gửi dưới dạng tham số thứ hai trong phương thức query() như ví dụ sau:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "nodejs_db"
});

con.connect(function(err) {
  if (err) throw err;
  var adr = 'Hà Nam';
  //thoát khỏi giá trị địa chỉ:
  var sql = 'SELECT * FROM customers WHERE address = ?';
  con.query(sql, [adr], function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});

Nếu bạn có nhiều placeholder thì ta có thể dùng nhiều ? như ví dụ dưới đây:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "nodejs_db"
});

con.connect(function(err) {
  if (err) throw err;
  var name = 'V1Study';
  var adr = 'Hà Nội';
  //thoát khỏi giá trị địa chỉ:
  var sql = 'SELECT * FROM customers WHERE name = ? and address = ?';
  con.query(sql, [name, adr], function (err, result) {
    if (err) throw err;
    console.log(result);
  });
});
» Tiếp: ORDER BY
« Trước: SELECT
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!