mysql - MySQL 程序中的参数类型?

标签 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 中尝试时,我被送回主页。

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

最佳答案

不幸的是,我不知道有什么方法可以直接在 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]+)$'; 

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

关于mysql - MySQL 程序中的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136110/

相关文章:

mysql - facebook group 相似的数据库设计和外键

mysql - 我怎样才能使这个查询运行得更快?

java - 如何使用过程将值插入数据库

php - 如何在phpMyAdmin中编写存储过程?

generics - Kotlin - 不尊重泛型类型参数

sql - 限制多对多连接查询的结果

mysql - Between 子句的正确索引

MySQL:获取所有过程输出参数为空

javascript - 告诉我的库函数的用户传递的变量类型不正确的最佳方法是什么

c++ - 检查模板函数的数据类型