1

うまくいけば、これはすぐに解決できる素晴らしいものです。

これが私の.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 を使用しています。

ありがとう。

4

2 に答える 2

4

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;
于 2009-12-03T03:36:03.010 に答える
1

MarcGrueのコメントへの直接リンク。

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

于 2011-07-04T18:46:59.207 に答える