MySQL程序中的参数类型?

时间:2011-05-26 09:05:15

标签: mysql stored-procedures typechecking procedures

我正在为基于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中尝试时,我被发送回主页。

所以我的问题是:我怎样才能让它更安全一点?有没有办法在这些程序中检查变量的类型?

1 个答案:

答案 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]+)$'; 

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