pArea
を連結しています 引用符で囲まれていないSQLへのパラメータ。つまり、@Query
のコンテンツです。 実行の準備をするのは:
SELECT PinCode FROM Areas WHERE AreaName = Teynampet
Teynampet
以降 引用符で囲まれていない場合は、文字列ではなく(n個の不明な)SQL識別子として解析されます。次のいずれかを行う必要があります:
-
SQLで引用してください:
SET @City = CONCAT(' WHERE AreaName = ', QUOTE(pArea));
-
それをパラメータとしてプリペアドステートメントに渡します:
SET @City = CONCAT(' WHERE AreaName = ?'); SET @param = pArea;
そして:
EXECUTE stmt USING @param;
しかし、なぜここでプリペアドステートメントを使用するのですか?プロシージャは、単純なSELECT
として書き直すことができます。 (これにより、ストアドプロシージャを使用する必要があるかどうかという疑問が生じます):
CREATE PROCEDURE mp_test(IN pArea VARCHAR(255))
SELECT PinCode FROM Areas WHERE pArea IN (AreaName, '');
(NULL
を使用することをお勧めします。 空の文字列の代わりに''
、この場合、上記のテストはpArea IS NULL OR pArea = AreaName
になります。 。