简体   繁体   中英

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. I am trying to create a simple procedure with single IN parameter with execution of simple prepare select statement. Am using IN parameter directly in select statement while creating PREPARE, this throwing Unknown column error for IN parameter on executing prepare statement.

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); 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. 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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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