简体   繁体   English

MySQL存储过程:在select语句中使用IN参数执行预准备语句抛出“错误代码:1054未知列”

[英]MySQL Stored Procedure: Executing prepared statement with IN parameter in select statement throws “Error Code: 1054 Unknown column”

I am new to MySQl stored procedure. 我是MySQl存储过程的新手。 I am trying to create a simple procedure with single IN parameter with execution of simple prepare select statement. 我正在尝试使用单个IN参数创建一个简单的过程,并执行简单的prepare select语句。 Am using IN parameter directly in select statement while creating PREPARE, this throwing Unknown column error for IN parameter on executing prepare statement. 我在创建PREPARE时直接在select语句中使用IN参数,这会在执行prepare语句时为IN参数抛出Unknown列错误。

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 $$

when I call procedure like CALL test_prep_stmt_two(1); 当我调用程序如CALL test_prep_stmt_two(1); am getting below error. 我低于错误。

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

But if I set IN param value to any variable inside procedure and use that in prepare select statement then it's working fine. 但是,如果我将IN param值设置为过程中的任何变量并在准备select语句中使用它,那么它的工作正常。 Below procedure is working fine. 以下程序工作正常。

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 ;

Please, can anyone explain me why using IN parameter in prepare select statement throwing error. 请问,任何人都可以解释为什么在准备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 ;

DELIMITER $$

Try above code. 试试上面的代码。

Hope this will helps. 希望这会有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM