【问题标题】:Argument's type in MySQL procedures?MySQL过程中的参数类型?
【发布时间】:2023-03-03 07:21:25
【问题描述】:

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

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

【问题讨论】:

    标签: mysql stored-procedures typechecking procedures


    【解决方案1】:

    不幸的是,我不知道直接在 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]+)$'; 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 2013-02-13
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多