gpt4 book ai didi

带输入和输出参数的 MySQL 存储过程不适用于字符串输入

转载 作者:行者123 更新时间:2023-11-29 19:02:20 25 4
gpt4 key购买 nike

我有一个带有两个 varchar 输入参数和一个 int 输出参数的存储过程。我的想法是,我传入表名和一个唯一的字符串,检查表以查看该字符串是否已存在于表中,如果存在,则返回该记录的 id。目前存储过程如下所示:

BEGIN 
SET @getID = CONCAT('SELECT `id` as id_Out FROM ',tablename_In,' WHERE `formSecret`=',formSecret_In);
PREPARE stmt FROM @getID;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END

如果我传入一个数字,一切都会正常,并且我会得到一个记录 ID。如果我传入完整的字母数字字符串(这就是唯一 ID),它会失败,告诉我该列不存在。

例如:call sp_GetRecordID(123456,'tbl_justsaythanks',@id_Out);将返回一个记录ID,就像我想要的那样。

但是如果我尝试从表中获取一个真实的 ID,它是一个字符串......

`call sp_GetRecordID('fc66d9a82ba717e0931462370e64baff','tbl_justsaythanks',@id_Out);`

我收到“错误代码:1054。‘where 子句’中存在未知列‘fc66d9a82ba717e0931462370e64baff’”

由于我是 MySQL 新手,所以我不确定我在这方面的立场 - 我怀疑这与在查询中应用刻度线来指定列有关,但我看不到此刻。

因此,任何为我指明正确方向的帮助将不胜感激。

最佳答案

尝试使用如下存储过程:

DROP PROCEDURE IF EXISTS `sp_GetRecordID`;

DELIMITER //

CREATE PROCEDURE `sp_GetRecordID`(
`tablename_In` VARCHAR(64),
`formSecret_In` VARCHAR(32),
OUT `id_Out` BIGINT UNSIGNED
)
BEGIN
SET @`query` := CONCAT('SELECT `id` INTO @`id_Out`
FROM ', `tablename_In` ,'
WHERE `formSecret` = \'', `formSecret_In`, '\'');
PREPARE `stmt` FROM @`query`;
EXECUTE `stmt`;
SET `id_Out` := @`id_Out`,
@`query` := NULL;
DEALLOCATE PREPARE `stmt`;
END//

DELIMITER ;

参见db-fiddle示例。

关于带输入和输出参数的 MySQL 存储过程不适用于字符串输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771124/

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