2011-06-14 45 views
0

我試圖根據在文本框中輸入像這樣試圖從表

String sql [email protected]" SELECT member_Id FROM members where (member_Firstname,'',member_Lastname) ="+tbMemberName.Text; 

如何才能做到這一點從文本數據庫獲得MEMBERID的MEMBERID?

+0

打印的最終查詢是什麼?你有什麼錯誤?這是什麼在哪裏(member_Firstname,'',member_Lastname) – zod 2011-06-14 20:45:46

+0

我想從數據庫中獲取成員身份,其中membername在文本框中輸入但在成員表中我有兩列成員名稱第一個是成員名字和另一個是成員姓氏。你會建議上述語法是合適的one.I使用MYSQL作爲數據庫 – user682417 2011-06-14 20:52:03

+0

什麼值輸入到'文本框'?名字和姓氏? – 2011-06-14 20:53:23

回答

0

試試這個:

String sql [email protected]" SELECT member_Id FROM members where CONCAT(member_Firstname,'',member_Lastname) = '"+tbMemberName.Text+"'"; 

此外,這是容易受到SQL注入。

+0

會給這個 – user682417 2011-06-14 20:59:24

+0

@ p.campbell任何想法,你是對的,謝謝。編輯答案。 – 2011-06-14 21:55:11

0

由於安全性和性能方面的原因,我個人會在編譯查詢之前先將之前的成員名稱拆分爲。現在,我不熟悉您使用調用此查詢的語言,但我會制定的東西,希望能是有意義的,無論它的愚蠢:

String sql [email protected]" SELECT member_Id FROM members WHERE member_Lastname = "+safely_escaped(tbMembername.Last.Text)+" AND member_Firstname = "+safely_escaped(tbMembername.First.Text)+" 

這將允許進行更精確的分析在將它插入到查詢之前的名稱,它將允許您使用索引(這對任何以前顯示的示例都是不可能的)。需要說明的是,在這種情況下,索引最有效的將是INDEX(member_Lastname,member_Firstname)。

0

如果您正在編寫C#,正如您所評論的那樣,您需要開始使用參數來避免SQL注入。

string getMember= @"SELECT member_Id FROM members 
        WHERE member_Firstname like @userText 
        OR member_Lastname like @userText;"; 

MySqlCommand m = new MySqlCommand(getMember); 
m.Parameters.AddWithValue("@userText", tbMemberName.Text + "%"); 

var reader = m.ExecuteReader();