2011-05-26 32 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]+)$'; 

這應該涵蓋大多數(如果不是全部的話)的可能性。