首页 > 解决方案 > 如何在 MySQL 的“EXECUTE STATEMENT USING”语句中使用变量列表?

问题描述

我有以下程序 -

DELIMITER $$
DROP PROCEDURE IF EXISTS testInjection $$
CREATE PROCEDURE testInjection(IN groupList LONGTEXT)
BEGIN
SET @groupList = groupList;
SET @QUERY = "SELECT * FROM ben where groupid IN ? ";
PREPARE stmt FROM @QUERY;
EXECUTE stmt USING @groupList;
DEALLOCATE PREPARE stmt;
END $$

' groupList ' 是一个长变量列表。调用上述过程时,我在“where groupid in ”附近出现 MySQL 语法错误?'。

在 Internet 上查找,我发现这?是一个仅用于单个变量的占位符,因此我们不能将其用于列表。即使我创建多个?变量,如“?,?,?” 并将其附加到mysql查询中。我应该如何在“ EXECUTE STATEMENT USING ”语句中使用@groupList变量?

我正在调用以下程序 -

CALL testInjection('(6598924, 6598928)')

标签: mysqlsqlstored-procedures

解决方案


您能否检查以下查询...

DELIMITER $$

DROP PROCEDURE

IF EXISTS testInjection $$
    CREATE PROCEDURE testInjection (IN groupList LONGTEXT)

BEGIN
    SET @groupList = groupList;
    SET @QUERY = "SELECT * FROM ben where groupid IN @groupList ";

    PREPARE stmt
    FROM @QUERY;

    EXECUTE stmt USING @groupList;

    DEALLOCATE PREPARE stmt;
END $$

推荐阅读