2011-12-30 112 views
1
myCommand.CommandText = "SELECT 'USED' FROM `KEYS` WHERE `KEYS`.`KEY` = '" + TextBox1.Text + "'" 

Dim myReader As MySqlDataReader 
      myReader = myCommand.ExecuteReader 
      While (myReader.Read()) 
       MessageBox.Show(myReader.GetString(0)) 
      End While 

返回的字符串是"USED"。但是這是錯誤的:它應該返回整數0。這是爲什麼?MySQL是返回列名,不珍惜

編輯:我改變了的MessageBox線MessageBox.Show(myReader.GetInt16(0))但現在它向我發送一個錯誤告訴我,輸入字符串是不正確的格式..

+1

您有一個SQL注入漏洞。 – SLaks 2011-12-30 17:39:54

+0

@SLaks:啊,你說得很對。我對此很新,我會盡快看看。謝謝。 – Voldemort 2011-12-30 17:44:28

回答

4

你需要反引號,不是撇號'不是'

你實際上選擇了字符串「USED」而不是列。你可以只取出撇號一起,說

myCommand.CommandText = "SELECT USED FROM `KEYS` WHERE `KEYS`.`KEY` = '" + TextBox1.Text + "'" 

另請注意,不要使用動態SQL - 使用準備好的查詢:

myCommand.CommandText = "SELECT USED FROM KEYS WHERE KEYS.KEY = @Key"; 
myCommand.Parameters.AddWithValue("@Key", TextBox1.Text); 

否則你對SQL注入很容易(這是一件非常糟糕的事情)。

+0

非常感謝! Pameters.AddWithValue方法究竟做了什麼? – Voldemort 2011-12-30 17:56:21

+0

它添加了一個給定名稱的參數,在本例中爲@ Key,並將傳遞的值(本例中爲TextBox1.Text)添加到查詢中。當查詢執行時,它將安全地插入該值,並將該參數的名稱放在命令文本中,這樣您就不必擔心未經您的許可而在應用程序上執行SQL代碼的人。 – Eric 2011-12-30 19:04:27

1

您正在使用錯誤的引號;你需要使用`因爲如此:

myCommand.CommandText = "SELECT `USED` FROM `KEYS` WHERE `KEYS`.`KEY` = '" + TextBox1.Text + "'" 
1

單引號名稱'USED'告訴它返回單詞'USED'在一個未命名的列。

0

這裏

"SELECT `USED` FROM `KEYS` WHERE `KEYS`.`KEY` = '" + TextBox1.Text + "'" 

你需要插入反引號,而不是單引號變化。