以下是查询:
INSERT INTO `users` (username, password, email) VALUES ('testu', 'testp', 'teste')
我使用以下VB代码(ASP)收到此错误:
username = Request.Form("username")
password = Request.Form("password")
email = Request.Form("email")
Dim conn As OleDbConnection = New OleDbConnection(GetConnectionString())
Dim comm As OleDbCommand = New OleDbCommand("INSERT INTO users (username, password, email) VALUES ('" & username & "', '" & password & "', '" & email & "')", conn)
conn.Open()
comm.ExecuteNonQuery()
这句话有什么问题?我知道连接字符串是正确的,因为我在其余的应用程序中都使用过它。
答案 0 :(得分:2)
同意!始终使用参数(准备好)查询并哈希密码。阅读SO帖子 - Salting Your Password: Best Practices?。
Dim conn As OleDbConnection = New OleDbConnection(GetConnectionString())
Dim comm As OleDbCommand = New OleDbCommand("INSERT INTO users (username, [password], email) VALUES (@username,@password,@email)",conn)
comm.Parameters.Add("@username",OleDbType.Varchar,30).Value=username
....
答案 1 :(得分:1)
不要将参数传递给带有连接的SQL命令!这是SQL注入攻击的一种开放方式。
您应该使用占位符作为参数,并使用comm.AddParameter()添加实际值。
至于你的错误 - 我希望你的一些参数值包含一个引号(')。