gpt4 book ai didi

MySQL 存储过程 : Executing prepared statement with IN parameter in select statement throws "Error Code: 1054 Unknown column"

转载 作者:行者123 更新时间:2023-11-29 05:08:15 25 4
gpt4 key购买 nike

我是 MySQl 存储过程的新手。我正在尝试创建一个带有单个 IN 参数的简单过程,并执行简单的 prepare select 语句。在创建 PREPARE 时直接在 select 语句中使用 IN 参数,这会在执行 prepare 语句时抛出 IN 参数的未知列错误。

DELIMITER $$

DROP PROCEDURE IF EXISTS test_prep_stmt_two$$

CREATE PROCEDURE test_prep_stmt_two(IN user_id_in INT)
BEGIN
#this line causing error
PREPARE param_stmt FROM "select * from users u where u.user_id=user_id_in";

EXECUTE param_stmt;

DEALLOCATE PREPARE param_stmt;


END $$

DELIMITER ;

DELIMITER $$

当我调用像 CALL test_prep_stmt_two(1) 这样的过程时;低于错误。

Error Code: 1054
Unknown column 'user_id_in' in 'where clause'

但是,如果我将 IN 参数值设置为过程中的任何变量,并在 prepare select 语句中使用它,那么它工作正常。以下程序运行良好。

DELIMITER $$

DROP PROCEDURE IF EXISTS test_prep_stmt_three$$

CREATE PROCEDURE test_prep_stmt_three(IN user_id_in INT)
BEGIN

SET @user_id_in=user_id_in;

#this works fine
PREPARE set_stmt FROM "select * from users u where u.user_id=@user_id_in";

EXECUTE set_stmt;

DEALLOCATE PREPARE set_stmt;

END $$

DELIMITER ;

拜托,谁能解释一下为什么在 prepare select 语句中使用 IN 参数会抛出错误。

最佳答案

DELIMITER $$

DROP PROCEDURE IF EXISTS test_prep_stmt_two$$

CREATE PROCEDURE test_prep_stmt_two(IN user_id_in INT)
BEGIN

SET @t1 = CONCAT("SELECT * FROM users u WHERE u.user_id = '", user_id_in, "'");
PREPARE param_stmt FROM @t1;
EXECUTE param_stmt;
DEALLOCATE PREPARE param_stmt;

END $$

DELIMITER ;

试试上面的代码。希望这会有所帮助。

关于MySQL 存储过程 : Executing prepared statement with IN parameter in select statement throws "Error Code: 1054 Unknown column",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44368906/

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