You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中MySQL PDO调用带命名参数的存储过程是否可行?

MySQL存储过程是否支持命名参数调用?

好问题!我刚好对这个点比较熟悉,来给你捋一捋目前的情况:

首先,截至MySQL 8.0及所有后续稳定版本,官方仍然不支持直接使用命名参数来调用存储过程——也就是说,你没办法像在PostgreSQL或者SQL Server里那样,通过参数名来指定传入的值,只能严格按照存储过程定义时的参数顺序来传递参数。

举个例子,如果我们定义了这样一个存储过程:

CREATE PROCEDURE update_user(IN user_id INT, IN new_email VARCHAR(100), IN new_phone VARCHAR(20))
BEGIN
  UPDATE users SET email = new_email, phone = new_phone WHERE id = user_id;
END;

调用的时候只能按位置传参,比如:

CALL update_user(101, 'new@example.com', '138xxxx1234');

而不能写成:

-- 这种写法在MySQL里会报错,不支持!
CALL update_user(user_id => 101, new_phone => '138xxxx1234', new_email => 'new@example.com');

你提到的相关需求请求,应该是指MySQL官方反馈系统里存在多年的那项呼吁,很多开发者都提出过这个需求——毕竟参数多的时候,按位置传参很容易搞混顺序,出错概率高。但遗憾的是,截至目前,这个需求还没有被官方实现,也没有明确的时间表说明何时会支持。

如果一定要模拟类似命名参数的效果,有个折中的办法:可以先把参数赋值给用户变量,再按位置传递,比如:

SET @uid = 101;
SET @phone = '138xxxx1234';
SET @email = 'new@example.com';
CALL update_user(@uid, @email, @phone);

这种方式虽然能通过变量名来明确参数含义,但本质上还是按位置传参,只是可读性稍微好一点,算不上真正的命名参数调用。

内容的提问来源于stack exchange,提问作者NoSoup4you

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:12:02