3

Web ベースのアプリケーション用にいくつかの MySQL プロシージャを作成していますが、引数の型チェックがまったくないことに驚かされます。

たとえば、次の場合:

CREATE PROCEDURE foo(n CHAR(4))

好きなように呼び出すことができます。それを受け入れて、最初の 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 で試してみると、ホーム ページに送り返されます。

だから私の質問は:どうすれば少し安全にできますか?これらの手順で変数の型を確認する方法はありますか?

4

1 に答える 1

0

残念ながら、これを mySQL で直接行う方法はわかりません。MS SQL のような他の RDMS では、使用できる 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]+)$'; 

これは、ほとんどの (すべてではないにしても) 可能性をカバーするはずです。

于 2011-05-31T04:31:05.137 に答える