2011-05-26 34 views
3

我正在为基于Web的应用程序编写一些MySQL程序,而令我感到震惊的是,根本没有参数的类型检查。参数在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

不幸的是,我不知道直接在mySQL中这样做的方法。在其他RDMS(如MS SQL)中,可以使用像isNumeric()这样的函数。

在mySQL中创建以下函数并使用它来检查传入的值是否为数字。

CREATE FUNCTION ISNUMERIC(myVal VARCHAR(1024)) 
RETURNS TINYINT(1) DETERMINISTIC 
RETURN myVal REGEXP '^(-|\\+)?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$'; 

这应该涵盖大多数(如果不是全部的话)的可能性。