我有这个有效:
sqlString = "SELECT * FROM employees WHERE lastname = '" & last_name & "'" Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = dbConn cmd.CommandText = sqlString cmd.Prepared = True Set recs = cmd.Execute
我遇到的问题是sqlString的动态部分之上是在准备好的语句命令之前.我不认为我上面的东西在保护我.
在执行预准备语句之前,我不必修复此sqlString吗?读这篇文章让我觉得:How can prepared statements protect from SQL injection attacks?:
“虽然在准备好的声明中,我们不会改变我们的计划,但它仍然完好无损
这才是重点.
我们首先将程序发送到服务器
$db->prepare("SELECT * FROM users where id=?");
其中数据被称为“占位符”的变量替换
然后我们分别发送数据:
$db->execute($data);
所以,它不能改变我们的计划并造成任何伤害.
很简单 – 不是吗?“
但我不知道如何使我的查询正确.我也不知道他是如何准备$data的.希望得到指导.谢谢.
解决方法
为什么不使用ADO命令参数?
var oCmd = Server.CreateObject("ADODB.Command"); oCmd.CommandText = "SELECT * FROM employees WHERE lastname = ?"; oCmd.Parameters.Append(oCmd.CreateParameter(undefined,202,1,50,"last name"))//adVarWChar