Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 您如何处理Mysql SP无法使用默认参数这一事实?_Php_Mysql_Stored Procedures_Default Value - Fatal编程技术网

Php 您如何处理Mysql SP无法使用默认参数这一事实?

Php 您如何处理Mysql SP无法使用默认参数这一事实?,php,mysql,stored-procedures,default-value,Php,Mysql,Stored Procedures,Default Value,有什么想法吗?我今天问了这个问题,答案是非常强烈的“不,这是不可能的。” 那么我的下一个问题是,作为php/mysql开发人员,您如何处理这个问题?是否传递null,并且SP中是否有一个IF块,用于设置变量是否为null?在PHP中是否传递默认值 谢谢。这应该由数据库处理,而不是由调用脚本处理。如果无法定义默认参数,则传递NULL值,并让存储过程执行默认操作。为MySQL 6安排可选参数 最简单的选择是编写一个添加默认值的包装器,或者为每种情况创建过程 我会考虑使用存储过程的推理。在绝大多数情况

有什么想法吗?我今天问了这个问题,答案是非常强烈的“不,这是不可能的。”

那么我的下一个问题是,作为php/mysql开发人员,您如何处理这个问题?是否传递null,并且SP中是否有一个IF块,用于设置变量是否为null?在PHP中是否传递默认值


谢谢。

这应该由数据库处理,而不是由调用脚本处理。如果无法定义默认参数,则传递
NULL
值,并让存储过程执行默认操作。

为MySQL 6安排可选参数

最简单的选择是编写一个添加默认值的包装器,或者为每种情况创建过程


我会考虑使用存储过程的推理。在绝大多数情况下,它们几乎没有什么好处,因为抽象可以在应用层执行,而减少网络流量通常是最不重要的。当然,这取决于您的应用程序。

这里有一个解决方案,使用
COALESCE()
设置存储过程中局部变量的值:

DELIMITER !!

CREATE PROCEDURE dflt (IN param1 INT)
BEGIN
 DECLARE param1_dflt INT DEFAULT 456
 SET param1_dflt = COALESCE(param1, param1_dflt);

 SELECT param1_dflt;
END!!

DELIMITER ;

CALL dflt(123);
+-------------+
| param1_dflt |
+-------------+
|         123 | 
+-------------+


CALL dflt(NULL);
+-------------+
| param1_dflt |
+-------------+
|         456 | 
+-------------+

MySQL 6的含义与以前不同;他们改变了所有未来的版本号。您是否可以编辑您的答案并添加一个链接,以引用MySQL在哪里公布了支持此功能的计划?我在bugs.mysql.com.Oh中找不到任何与之相关的东西-如果我记得的话,这是一个旧的bug,它被管道连接到了一个关于版本6的特征请求中。我知道他们仍在开发版本6中的存储过程,因此可能会在一个小版本中发布。自2005年底以来已验证且未分配:(非常好!感谢链接!欢迎您-祝您在OSCON好运。不幸的是,我有一个牡鹿周末,所以我不会来了:(什么是唯一正确的插入?我是在表达我的观点而不是事实陈述。。。