2017-08-28 96 views
-1

問題在哪裏?VBScript註冊[ASP] MSSQL]

Error: "Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ','.

/checkregistrazione.asp, line 27"

的代碼是:

<%@LANGUAGE = VBScript%> 
<% 
Dim str_cn 
str_cn = "" 
str_cn = str_cn & "driver={SQL Server};Server=62.149.153.49;Database=MSSql151186;uid=MSSql151186;pwd=y5ii1s154j;" 
Dim rs ' Variabile per il Recordset 
' Creo un'istanza per la connessione ed una per il Recordset 
Set cn = Server.CreateObject("ADODB.Connection") 
Set rs = Server.CreateObject("ADODB.Recordset") 
cn.Open str_cn ' Apro la connessione al database 

Dim nomeutente 
nomeutente = Request.Form("nomeutente") 
Dim password 
password = Request.Form("password") 
Dim email 
email = Request.Form("email") 
Dim nomeimpresa 
nomeimpresa = Request.Form("nomeimpresa") 
Dim cellulare 
cellulare = Request.Form("cellulare") 

Dim SQL ' Creo la query SQL 
SQL = "INSERT INTO [dbo].[utenti] ([ID_utente], [nome_utente], [password], [email], [nome_impresa], [cellulare]) VALUES ("& 2 &","& nomeutente &","& password &","& email &","& nomeimpresa &","& cellulare &");" 

' Apro il Recordset 
rs.Open SQL, cn 
%> 
<html> 
<head> 
<title>Lettura dei dati da un database</title> 
</head> 
<body> 
<% 
' Verifico che la tabella contenga dati 
' Se non ne contiene lancio un messaggio di avviso 
If rs.EOF = True Then 
%> 
<p>Errore</p> 
<% 
' Se invece ne contiene visualizzo i dati in funzione 
' della query SQL specificata 
Else 
While rs.EOF = False 
%> 
    <p> 
    <h1>Dati inseriti correttamente nel database</h2> 
    </p> 
<% 
rs.MoveNext 
Wend 
End If 
%> 
</body> 
</html> 
<% 
' Chiudo il Recordset 
rs.Close 
Set rs = Nothing 
' Chiudo la connessione 
cn.Close 
Set cn = Nothing 
%> 

請幫幫我!該數據庫是MSSQL服務器

+0

拍攝到黑暗中:sql查詢中的[]'是錯誤的。 – reporter

+0

我fixet它,但問題是一樣 –

+0

檢查此https://stackoverflow.com/questions/26750894/microsoft-ole-db-provider-for-sql-server-error-80040e14-incorrect-syntax-near – Rex

回答

0

查詢中存在語法錯誤。因爲你的查詢中有變量,所以變量中可能會有一些東西搞亂你的查詢。當我看到您的查詢,最可能的解釋是,你的文本字段需要加引號,像這樣:

SQL = "INSERT INTO [dbo].[utenti] ([ID_utente], [nome_utente], [password], [email], [nome_impresa], [cellulare]) VALUES ("& 2 &",'"& nomeutente &"','"& password &"','"& email &"','"& nomeimpresa &"','"& cellulare &"');" 

如果不能解決問題,請行24後添加以下行:

response.write(SQL) 
response.end 

這會顯示你的查詢,並希望你會看到什麼是錯的。

請注意:

混合變量的這種方式和代碼被稱爲SQL注入一個非常大的安全問題。你可以閱讀更多關於SQL注入here。 (看看例子)

爲了防止經典ASP中的SQL注入,有不同的方法。我建議你試試谷歌找一些。 Here就是一個例子。

+2

我完全同意關於sql注入的問題,但你用經典asp引用的文章是一個笑話。即使經典的asp支持參數化查詢。創建一個無效單詞的「黑名單」是可怕的。它阻止了實際的數據被插入,反而不夠好。 –

+0

同意了,我更新了示例鏈接。謝謝@SeanLange –