mady
mady

Reputation: 119

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.

Upvotes: 2

Views: 3807

Answers (1)

Sagar Gangwal
Sagar Gangwal

Reputation: 7937

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 ;

Try the above code. Hope this will help.

Upvotes: 4

Related Questions