Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sử dụng WHERE IN() trong Stored Procedure MySQL

Truy vấn động với WHERE IN() trong MySQL Stored Procedure

Sử dụng PREPARE và EXECUTE để xây dựng truy vấn động nhận danh sách giá trị IN().

Tạo bảng và dữ liệu

mysql> create table DemoTable ( Id int, Name varchar(20) ); 
Query OK, 0 rows affected (0.69 sec)
mysql> insert into DemoTable values(100,'Chris'); 
mysql> insert into DemoTable values(101,'Bob'); 
mysql> insert into DemoTable values(102,'David');

Tạo Stored Procedure

mysql> DELIMITER // 
mysql> CREATE PROCEDURE whereInDemo(in input varchar(100)) 
    -> BEGIN 
    -> set @Query = 'select Name from DemoTable '; 
    -> set @Query = CONCAT(@Query,' where Id IN (',`input`,')'); 
    -> prepare stmt from @Query; 
    -> execute stmt; 
    -> deallocate prepare stmt; 
    -> END // 
Query OK, 0 rows affected (0.23 sec) 
mysql> DELIMITER ;

Gọi procedure

mysql> call whereInDemo('100,102');

Kết quả

+-------+ 
| Name  | 
+-------+ 
| Chris | 
| David | 
+-------+ 
2 rows in set (0.04 sec)

⚠️ Cảnh báo bảo mật: Cách này dễ bị SQL Injection nếu đầu vào không được kiểm soát. Trong môi trường sản xuất, nên sử dụng Prepared Statements với tham số hoặc hàm FIND_IN_SET() an toàn hơn.

Cách an toàn hơn:

CREATE PROCEDURE whereInDemoSafe(IN ids TEXT)
BEGIN
    SELECT Name FROM DemoTable 
    WHERE FIND_IN_SET(Id, ids) > 0;
END