Quy trình
- Gán tên bảng cho biến
@yourTableName. - Xây dựng chuỗi truy vấn bằng
CONCAT()gán cho biến@query. PREPAREstatement từ biến.EXECUTEstatement.
1. Tạo bảng
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20),
LastName varchar(20)
);
Query OK, 0 rows affected (0.53 sec)
2. Chèn dữ liệu
mysql> insert into DemoTable(FirstName,LastName) values('John','Smith');
mysql> insert into DemoTable(FirstName,LastName) values('David','Miller');
mysql> insert into DemoTable(FirstName,LastName) values('John','Doe');
mysql> insert into DemoTable(FirstName,LastName) values('Chris','Brown');
3. Xem dữ liệu
mysql> select * from DemoTable;
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | John | Smith | | 2 | David | Miller | | 3 | John | Doe | | 4 | Chris | Brown | +----+-----------+----------+ 4 rows in set (0.00 sec)
4. Thực thi Prepared Statement động
mysql> set @yourTableName := 'DemoTable';
mysql> set @query := CONCAT('select `LastName` from ', @yourTableName, ' where Id=3');
mysql> prepare myStatement from @query;
mysql> execute myStatement;
Kết quả:
+----------+ | LastName | +----------+ | Doe | +----------+ 1 row in set (0.00 sec)
Ứng dụng: Xây dựng SQL động trong stored procedure, tránh SQL Injection bằng cách validate tên bảng/cột trước khi CONCAT.