Почему мой классический ASP-код вставляет дублирующую запись (т.е. две записи вместо одной)? - PullRequest
1 голос
/ 04 июля 2019

Это простой кусок кода ASP.У меня не должно быть проблем с этим.Тем не менее, вот оно!

Я искал переполнение стека и не могу найти ответ.У меня есть вставка SQL, которая продолжает создавать две записи.Я не могу найти причину, ритм или рифму, чтобы решить эту проблему.Что заставляет меня иметь эту дубликат записи?

<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; DATA 

SOURCE=c:/inetpub/wwwroot/website/database/msg.mdb"
sql="INSERT INTO msg (uid,thisuid,bizid,ucomments,posted) VALUES 
('"&request("uid")&"','"&request("thisuid")& 
"','"&request("bizid")&"','"&request("ucomments")&"','"&Now&"');"

Set rs= Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 2
conn.Execute sql
conn.close

'response.redirect "show-msg.asp"
%>

1 Ответ

4 голосов
/ 04 июля 2019

Вы открываете свой оператор SQL с помощью rs.open, а затем выполняете его с помощью conn.execute -> двойная вставка. Нет необходимости создавать набор записей для вставки, достаточно conn.execute.

Однако оба метода rs.Open и conn.Execute открыты для SQL-инъекции из-за способа, которым был создан оператор SQL. В этом сценарии лучшим подходом является очистка любого ввода перед передачей непосредственно в оператор SQL и переключение на использование параметризованных запросов , которые используют объект ADODB.Command.

...