Mysql 使用execute防止查询中的注入
我正在用Visual Studio 2017开发一个报告网站。我所有的MYSQL查询都是参数化的,工作正常。问题在于某些查询使用EXECUTE命令 例如: 而不是Mysql 使用execute防止查询中的注入,mysql,vb.net,sql-injection,Mysql,Vb.net,Sql Injection,我正在用Visual Studio 2017开发一个报告网站。我所有的MYSQL查询都是参数化的,工作正常。问题在于某些查询使用EXECUTE命令 例如: 而不是 SELECT * FROM tabla WHERE id=@id 我把 set @sentencia='SELECT * FROM tabla WHERE id=@id' PREPARE stmt FROM @sentencia; EXECUTE stmt using @id; DEALLOCATE PREPARE stmt; e
SELECT * FROM tabla WHERE id=@id
我把
set @sentencia='SELECT * FROM tabla WHERE id=@id'
PREPARE stmt FROM @sentencia;
EXECUTE stmt using @id;
DEALLOCATE PREPARE stmt;
execute案例不会中断,但不会工作,因为它不返回任何数据
我试过这个:
set @sentencia='SELECT * FROM tabla WHERE id=?'
PREPARE stmt FROM @sentencia;
EXECUTE stmt using @id;
DEALLOCATE PREPARE stmt;
但它不起作用。错误消息是:
您的SQL语法有错误;检查手册
对应于您的MySQL服务器版本,以便使用正确的语法
16年左右,;
在第1行取消分配“准备stmt”
16对应于我在代码中给参数@id的值
Dim myConnectionMYSQL As New MySql.Data.MySqlClient.MySqlConnection
myConnectionMYSQL.ConnectionString = CadenaDeConexion()
myConnectionMYSQL.Open()
Dim myCommandMYSQL As New MySql.Data.MySqlClient.MySqlCommand(_Sentencia, myConnectionMYSQL)
myCommandMYSQL.CommandTimeout = 9000
myCommandMYSQL.Parameters.Add("@id", SqlDbType.Int, 100)
myCommandMYSQL.Parameters("@id").Value = 16
Dim daMYSQL As New MySql.Data.MySqlClient.MySqlDataAdapter(myCommandMYSQL)
Dim dtMYSql As New DataTable
daMYSQL.Fill(dtMYSql)
有人知道可能的解决办法吗?
非常感谢 试试看
PREPARE stmt FROM 'SELECT * FROM tabla WHERE id=?';
SET @id= 'YOURID';
EXECUTE stmt USING @id;
DEALLOCATE PREPARE stmt;
在您的示例中,您未设置id
。应该是
SET @id = 'SOMEID';
你在哪里设置了@id?你在设置的末尾忘了一个“;”吗?对不起,我忘了写。在我的代码中有;jejeI在我的.net代码中设置@id。我已经改变了,但是我的查询是动态的。根据用户选择的过滤器,@id是不同的。如果我只是替换SET@id=[MYID];;中的文本;,我不知道这是否会阻止SQL注入。