我正在为基于Web的应用程序编写一些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中尝试时,我被发送回主页。
所以我的问题是:我怎样才能让它更安全一点?有没有办法在这些程序中检查变量的类型?
答案 0 :(得分:0)
不幸的是,我不知道在mySQL中直接这样做的方法。在其他RDMS中 - 就像MS SQL一样,你可以使用像isNumeric()这样的函数。
在mySQL中创建以下函数并使用它来检查传入的值是否为numberic。
CREATE FUNCTION ISNUMERIC(myVal VARCHAR(1024))
RETURNS TINYINT(1) DETERMINISTIC
RETURN myVal REGEXP '^(-|\\+)?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$';
这应该涵盖大多数(如果不是全部)可能性。