Разочаровывающая ошибка ПРОЦЕДУРЫ СОЗДАНИЯ MySQL
-
11-09-2019 - |
Вопрос
Надеюсь, это можно быстро решить.
Вот мой 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;
Другие советы
Прямая ссылка на Комментарии Марка Грю.
Хитрость для того, чтобы сделать это :Получите идентификатор таблицы комментария и создайте привязку в URL-адресе.
Не связан с StackOverflow