我正在使用 MySQL ODBC 5.1 驱动程序在 Excel 中的 VBA 中工作,并且在尝试使用参数化 SQL 查询将行插入表中时遇到问题。在参数化之前,查询运行良好,但我遇到了 SQL 注入问题,其中一列中有包含 SQL 代码的注释,并将插入全部搞砸了。我现在正在转向参数化的最佳实践,但我似乎无法找出我在下面的代码中做错了什么以及为什么它给了我“'字段列表'中的“未知列'p1'”错误。
For y = 0 To 20000
qry = "INSERT INTO ticket_system.ticket_weekly_snapshot (issue_type,key_name,summary,assignee,reporter,priority,status,resolution,created,updated,due_date,project,linked_issues,parent_link,epic_link,parent_undefined,label,comment) VALUES ("
Dim adoCmd As Object
Dim adoRS As Object
Set adoCmd = CreateObject("ADODB.Command")
With adoCmd
.ActiveConnection = cnn
.CommandType = adCmdText
If alltix.Range("A2").Offset(y, 0) = "" Then
Exit For
End If
For x = 0 To 17
Dim l As Integer
l = Len(alltix.Range("A2").Offset(y, x))
If l = 0 Then
l = 10
End If
.Parameters.Append .CreateParameter("p" & x + 1, adLongVarChar, adParamInput, l, alltix.Range("A2").Offset(y, x))
If x = 17 Then
qry = qry & "p" & x + 1 & ")"
Else
qry = qry & "p" & x + 1 & ","
End If
Next x
End With
adoCmd.CommandText = qry
Set adoRS = adoCmd.Execute
我目前有一个用于测试的消息框提示,显示查询正在正确构建,以“VALUES (p1, p2, ... p18)”结尾,这就是我迄今为止看到的几乎所有参数化查询的工作方式。所有参数都正确添加到 adoCmd,没有值错误或类似的东西。adoCmd 执行时,最后一行出现“字段列表中的未知列”错误。谁能帮助我并告诉我我哪里出错了?