2012-05-12 24 views
9

Truy vấn này có an toàn với việc tiêm sql kết hợp với Dapper không? Nếu không, điều gì sẽ là cách chính xác để viết nó dưới MySql? Hoặc là có một phiên bản tốt hơn mà không cần sử dụng concat?Truy vấn Dapper LIKE cho MySql an toàn với Sql Injection?

string sql = "SELECT * from user_profile WHERE FirstName LIKE CONCAT("%",@name,"%");" 
var result = connection.query<profile>(sql, new {name}); 

Trả lời

4

Đây là an toàn bởi vì bạn đang không xây dựng SQL động ở tất cả các. Tên chỉ là một tham số bình thường. Trên thực tế, nó không có gì để làm với Dapper.

Sử dụng chuỗi ký tự ở đây là lựa chọn đúng. Hoặc bạn có thể sử dụng chức năng SUBSTRING_INDEX.

15

Có không phải là một vấn đề với mã mà, nhưng cách tiếp cận khác là để thực hiện các concat ở người gọi, ví dụ:

const string sql = "SELECT * from user_profile WHERE FirstName LIKE @name;"; 
var result = connection.Query<Profile>(sql, new {name = "%"+name+"%"}); 
+1

này hoạt động nhưng cung cấp các sever với ít thông tin về cấu trúc của mô hình. Bạn không chắc chắn nếu điều này quan trọng đối với tìm kiếm chuỗi con nhưng nó chắc chắn làm cho các tìm kiếm bắt đầu. – usr

+0

@usr nó sẽ là thú vị để hồ sơ đó. Nó không ảnh hưởng đến một số RDBMS khác theo cách tiêu cực. –

+0

Cảm ơn cả hai vì câu trả lời của bạn! – Epstone

Các vấn đề liên quan