2012-05-12 17 views
9

Bu sorgu Dapper ile birlikte sql enjeksiyonuna karşı güvenli midir? Değilse, MySql altında yazmanın doğru yolu ne olurdu? Ya da concat kullanmadan daha iyi bir sürümü var mı? Eğer tüm dinamik SQL bina olmadığı içinDapper MySql güvenli sorgulama Sql Enjeksiyon karşı?

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

cevap

4

Bu güvenli olduğunu. İsim sadece normal bir parametredir. Aslında, Dapper ile ilgisi yok.

Burada bir dizgi concat kullanarak doğru seçimdir. Alternatif olarak, SUBSTRING_INDEX işlevini kullanabilirsiniz.

15

bu kodu ile ilgili bir sorun değil, ama başka bir yaklaşım, yani

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

Bu işler ancak desen yapısı hakkında daha az bilgi sever sağlar, arayan en concat yapmaktır. Bu, substring aramaları için önemli olup olmadığından emin değil, kesinlikle aramalarla ilgili aramalar için de geçerlidir. – usr

+0

@usr bunu profillemek ilginç olurdu. Başka bir RDBMS'yi olumsuz yönde etkilemez. –

+0

Yanıtlarınız için ikinize de teşekkür ederiz! – Epstone

İlgili konular