希望这是一个很快解决的问题。
这是我的.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。
感谢。
答案 0 :(得分: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;
答案 1 :(得分:1)
Marc Grue's comments的直接链接。
Trick to do this: 获取评论的表格ID并在URL中创建一个锚点。