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になります。 。