gpt4 book ai didi

mysql - 如何在MySQL "EXECUTE STATEMENT USING"语句中使用变量列表?

转载 作者:行者123 更新时间:2023-11-29 15:23:02 24 4
gpt4 key购买 nike

我有以下程序 -

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 语法错误'.

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

我调用的过程如下 -

CALL testInjection('(6598924, 6598928)')

最佳答案

当解析逗号分隔值作为IN的输入时,它将被视为字符串,因此我们需要使用find_in_set

尝试以下查询

DELIMITER $$
CREATE PROCEDURE testInjection(IN groupList LONGTEXT)
BEGIN
SET @groupList = groupList;
SET @QUERY = 'select * from ben where find_in_set (groupid,?)';
PREPARE stmt FROM @QUERY;
EXECUTE stmt USING @groupList;
DEALLOCATE PREPARE stmt;
END $$

调用:
调用 testInjection('6598924, 6598928');

关于mysql - 如何在MySQL "EXECUTE STATEMENT USING"语句中使用变量列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59243109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com