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

直接链接到Marc Grue 的评论

这样做的技巧:获取评论的表 id 并在 URL 中创建一个锚点。

于 2011-07-04T18:46:59.207 回答