1
MySQlストアドプロシージャの新機能です。私は単純な準備のSELECTステートメントの実行と単一のINパラメータで簡単なプロシージャを作成しようとしています。 PREPAREの作成中にSELECT文でINパラメータを直接使用している場合、prepare文の実行時にINパラメータのUnknown列エラーがスローされます。MySQLストアドプロシージャ:selectステートメントのINパラメータでプリペアドステートメントを実行すると、 "Error Code:1054 Unknown column"が返されます
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 $$
Iコールtest_prep_stmt_two(1)のようなプロシージャを呼び出します。下にエラーが発生しています。
Error Code: 1054
Unknown column 'user_id_in' in 'where clause'
しかし、私はプロシージャ内で任意の変数にPARAM値で設定し、その中には、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 [email protected]_id_in";
EXECUTE set_stmt;
DEALLOCATE PREPARE set_stmt;
END $$
DELIMITER ;
でエラーを投げselect文を準備し、パラメータIN使用して、なぜ、誰も私を説明することができます。
ありがとう@Sagar Gangwal。ありがとうございます。 INパラメータで動作しない理由と、SETまたはconcatで動作する理由を説明してください。 – mady
@ mady動的クエリを作成する必要があります。あなたが直接二重引用符を入れてmysqlエンジンがこれは全体のクエリであり、それを実行しようとしていることを理解してください。しかし、私はその変数を入れていたとconcatを使用して動的クエリを行う。 –