2015-02-05 4 views
-1

나는이 코드 라인을 가지고 있으며 내 데이터베이스에서 soundex 결과를 조사하려고하지만 분명히 결과를 반환하지는 않습니다.Mysql Soundex (VB.NET 형식)

con.Open() 

    Try 
     Dim query As String 
     query = "SELECT * FROM table_name WHERE column_name LIKE CONCAT('" & "%" & "',SOUNDEX('" & input & "'),'" & "%" & "')" 
     cmd = New MySqlCommand(query, con) 
     adapter.SelectCommand = cmd 
     reader = cmd.ExecuteReader 
     Dim list As New ListViewItem 
     While reader.Read() 
      list = ListView1.Items.Add(dr(1).ToString()) 
      list.SubItems.Add(dr(2).ToString()) 
     End While 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

    con.Close() 

MessageBox에는 예외가 발생하지 않습니다.

위의 쿼리를 수행하기 전에 데이터베이스에서 반환 된 데이터가 있는지 확인하기 위해 select * from table_name을 수행했습니다.

감사합니다.

+2

이것은 SQL 주입 공격에 매우 취약합니다. 실질적으로 해킹을 구걸하고 있습니다. 절대로 ** 이제까지 ** 문자열 연결을 사용하여 SQL 쿼리에 입력을 넣지 마십시오. –

+0

컨텍스트가 충분하지 않다고 생각합니다. 예 : db에 직접 연결하여 레코드를 확보했는지 여부를 확인 했습니까? – zealoushacker

+0

샘플 데이터, 예상 출력 및'input' 변수의 값을 제공 할 수 있습니까? 귀하의 질의는 solid-ish (틈이 나는 SQL 주입 취약점 제외)로 보입니다. 따라서 구문 오류가 아닐 수 있으며 게시 된 코드를 기반으로 모든 사용자가 구문을 검증 할 수 있습니다. –

답변

1

나는이 글자를 접두사로 붙일 것이다. 그러나 나는 Sqldex 알고리즘이 비슷한 소리를내는 단어에 대해 같은 "코드"를 리턴한다. 예 :

SOUNDEX('Smith') = 'S530' 
SOUNDEX('Smythe') = 'S530' 

그래서, column_name 값이 아래와 같이 이런 식으로 뭔가를 (SQL 주입 문제에 대한 경고를주의하고 는 문자열 연결을 사용하지 않는 원하는 것 input 값처럼 들리는 경우 기록을 찾기 위해!) :

query = "SELECT * FROM table_name WHERE SOUNDEX(column_name) = SOUNDEX('" & input & "')"