Я пишу некоторые процедуры MySQL для веб-приложения, и меня поразило то, что вообще нет проверки типа аргумента.
Например, если у меня есть следующее:
CREATE PROCEDURE foo(n CHAR(4))
Я могу назвать это любым, чем захочу, он примет это и возьмет только четыре первых символа. Но если я хочу сделать что-то вроде этого:
use base;
DELIMITER $$
DROP PROCEDURE IF EXISTS open $$
CREATE PROCEDURE open(n INT)
BEGIN
SELECT * FROM prod_charts LIMIT n;
END $$
DELIMITER ;
Он просто падает, когда вызывается с не-int параметром. И обратной связи нет: при вызове из php я просто ничего не получаю, а при попытке в phpMyAdmin меня отправляют обратно на домашнюю страницу.
Итак, мой вопрос: как я могу сделать это немного безопаснее? Есть ли способ проверить тип переменной в этих процедурах?