質問

これが迅速に解決されることを願っています。

これが私の .sql ファイルです。

USE my_db;

DELIMITER $$
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT)
BEGIN
  SELECT DISTINCT `suburb`, `postcode`
  FROM `location`
  WHERE `suburb` LIKE '%argQuery%'
  OR `postcode` LIKE 'argQuery%'
  LIMIT argLimit
  ;
END
$$
DELIMITER ;

これが出力です:

ERROR 1064 (42000) at line 4: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'argLimit
  ;
END' at line 8

したがって、パラメータ argLimit が気に入らないようですが、その理由はわかりません。私は何か愚かなことをしているに違いありません。

MySQL 5.0.51を使用しています。

ありがとう。

役に立ちましたか?

解決

LIMIT は定数である必要があり、MySQL のプロシージャまたは関数内でパラメータ化することはできません。ただし、次の方法を使用してこの問題を回避することができます。 PREPARE ... EXECUTE ... USING 構文。

最終的には次のようになります。

...
SET @qry= argQuery;
SET @lmt= argLimit;

PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?';
EXECUTE stmt USING @qry, @qry, @lmt;
DEALLOCATE PREPARE stmt;

他のヒント

マルク・Grueのコメントするへの直接リンク。

このに行うためのトリック: コメントのテーブルIDを取得し、URLにアンカーを作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top