2016-01-16 1 views
0

У меня есть оператор SQL, который сохраняет имя пользователя в базу данных MySQL на PHPMyAdmin, которая работает как шарм:Инструкция MySQL для сохранения пароля в базе данных?

Dim SQLStatement As String = "INSERT INTO accountinfodb(`Usernames`) VALUES ('" & txtUsername.Text & "')" 

Однако

Я также запрашивать пароль пользователей, которые я хотели бы хранить, так что я, хотя это имело бы смысл:

Dim SQLStatement As String = "INSERT INTO accountinfodb(`Usernames`, `Passwords`) VALUES ('" & txtUsername.Text & txtPasswd.Text & "')" 

к сожалению, этот код не работает, я получаю ошибки о в крышкой и открытым соединением, или синтаксической ошибкой в ​​синтаксисе MySQL. Поэтому мне было интересно, знает ли кто-нибудь правильный способ сохранить имя пользователя и пароль в моей БД?

Вот мой FULL код vb.net.

Imports MySql.Data.MySqlClient 


Public Class frmSignup 
Dim ServerString As String = "Server=localhost;User Id=root;Password=;Database=accountinfo" 
Dim SQLConnection As MySqlConnection = New MySqlConnection 

Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    SQLConnection.ConnectionString = ServerString 

    Try 
     If SQLConnection.State = ConnectionState.Closed Then 
      SQLConnection.Open() 
      MsgBox("Successfully connected to DB") 

     Else 
      SQLConnection.Close() 
      MsgBox("Failed to connect to DB") 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 

    End Try 
End Sub 

Public Sub SaveAccountInformation(ByRef SQLStatement As String) 
    Dim cmd As MySqlCommand = New MySqlCommand 

    With cmd 
     .CommandText = SQLStatement 
     .CommandType = CommandType.Text 
     .Connection = SQLConnection 
     .ExecuteNonQuery() 
    End With 
    SQLConnection.Close() 
    SQLConnection.Dispose() 
End Sub 

Private Sub btnSignup_Click(sender As Object, e As EventArgs) Handles btnSignup.Click 
    If txtPasswd.Text = txtPasswd2.Text Then 
     MessageBox.Show("Passwords Match!") 

     Dim SQLStatement As String = "INSERT INTO accountinfodb(`Usernames`, `Passwords`) VALUES ('" & txtUsername.Text & txtPasswd.Text & "')" 
     SaveAccountInformation(SQLStatement) 



     MessageBox.Show("Account Successfully Registered") 
    Else 
     MessageBox.Show("Passwords Do Not Match!") 
     txtPasswd.Text = Focus() 
     txtPasswd.Clear() 
     txtPasswd2.Text = Focus() 
     txtPasswd2.Clear() 

    End If 
End Sub 
End Class 

EDIT 1

@Rahul

Я добавил ваш SQL заявление, мой код, и я дал следующее сообщение об ошибке, когда я ввод случайное имя пользователя/пароль

необработанное исключение типа «MySql.Data.MySqlClient.MySqlException» произошло в MySql.Data.dll

Дополнительная информация: У вас возникла ошибка в синтаксисе SQL; проверить инструкцию, которая соответствует вашей версии сервера MariaDB для корректного синтаксиса использовать вблизи «тест»)»в строке 1

+0

Google для операторов SQL с параметрами по многим причинам –

+0

@SirRufo Можете ли вы по крайней мере объяснить, почему мой SQL заявление не работает? – Jcrow

+0

Вы обещаете детали БД 2, затем приклейте два предмета вместе и только отправьте их; это синтаксическая ошибка. Используйте SQL-параметры и то, что вы делаете, намного яснее (и это не сработает, если имя пользователя «D'Angelo» ... или что еще хуже). Вы не открываете соединение, так что это другая ошибка. – Plutonix

ответ

2

Посмотрите на ваше заявление SQL INSERT, он отсутствует , запятой в VALUES разделе

VALUES ('" & txtUsername.Text & txtPasswd.Text & "') 
          ^... Here 

Ваше заявление должно выглядеть

"INSERT INTO accountinfodb(`Usernames`, `Passwords`) 
VALUES ('" & txtUsername.Text & "','" & txtPasswd.Text & "')" 

E dit: Я должен упомянуть, что ваш текущий код уязвим для атаки SQL Injection из-за того, что вы передаете пользовательский ввод напрямую в виде конкатенированных значений. Вы должны использовать SqlParameter и передать эти значения в качестве параметра, соответственно. Образец будет

Dim SQLStatement As String = "INSERT INTO accountinfodb(`Usernames`, `Passwords`) VALUES (@username, @password)" 

    cmd.Parameters.AddWithValue("@username", txtUsername.Text.Trim()) 
    cmd.Parameters.AddWithValue("@password", txtPasswd.Text.Trim()) 
+0

Я бы сказал, что отсутствует поле, а затем запятая :-) – Steve

+0

И пропавших без вести стратегических котировок – nicomp

+0

@Steve Можете вы объяснить? :) – Jcrow

Смежные вопросы