如何通过phpMyAdmin界面使用存储过程及PHP调用方法
用phpMyAdmin创建存储过程并在PHP中调用
我之前也遇到过和你一样的问题——找了好多资料都没讲清楚phpMyAdmin的Add Routine窗口怎么填,后来自己摸索出来了,还整理了PHP调用的方法,分享给你:
一、通过phpMyAdmin的Add Routine创建存储过程
步骤其实很直观,跟着下面的细节填就行:
- 打开目标数据库,在顶部导航栏找到Routines选项卡,点击进入后,右上角有个「Add routine」按钮,点击弹出创建窗口。
- 逐个填写窗口里的关键项:
- Routine type:选择
PROCEDURE(如果是函数才选FUNCTION,存储过程就选这个) - Name:给存储过程起个合法的名字,比如
get_user_info,注意别和现有表名/其他存储过程重名 - Parameters:填写输入/输出参数,格式是
参数类型 参数名,比如要传入用户ID就写IN user_id INT,多个参数用逗号分隔(比如IN user_id INT, IN status TINYINT) - Definition:这里放你的核心SQL逻辑,比如原来的查询语句是
SELECT name, email FROM users WHERE id = ?,那这里就写:
👉 注意:如果你的存储过程包含多条SQL语句,一定要修改窗口底部的Delimiter(默认是BEGIN SELECT name, email FROM users WHERE id = user_id; END;;),改成//或者$$,不然MySQL会把第一个分号当成存储过程的结束符,导致语法错误。比如把Delimiter改成$$,定义部分就写成BEGIN ... END$$ - Security type:默认选
DEFINER就行,它代表用创建者的权限执行;如果想让调用者用自己的权限执行,选INVOKER
- Routine type:选择
- 所有项填完后,点击「Go」,存储过程就创建好了,回到Routines页面就能看到它。
二、在PHP代码中调用存储过程
这里分两种常用的数据库扩展来举例,你可以根据自己的项目选择:
1. 使用mysqli扩展
// 建立数据库连接 $dbHost = 'localhost'; $dbUser = '你的用户名'; $dbPass = '你的密码'; $dbName = '你的数据库名'; $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName); if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // 调用存储过程(以刚才的get_user_info为例,传入user_id=5) $stmt = $conn->prepare("CALL get_user_info(?)"); // 绑定参数:"i"代表整数类型,对应参数的INT类型 $targetUserId = 5; $stmt->bind_param("i", $targetUserId); // 执行并获取结果 $stmt->execute(); $result = $stmt->get_result(); // 遍历输出结果 while ($row = $result->fetch_assoc()) { echo "用户名:" . $row['name'] . ",邮箱:" . $row['email'] . "<br>"; } // 清理资源 $stmt->close(); $conn->close();
2. 使用PDO扩展
try { $dbHost = 'localhost'; $dbUser = '你的用户名'; $dbPass = '你的密码'; $dbName = '你的数据库名'; $conn = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPass); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 调用存储过程,绑定命名参数 $targetUserId = 5; $stmt = $conn->prepare("CALL get_user_info(:user_id)"); $stmt->bindParam(':user_id', $targetUserId, PDO::PARAM_INT); $stmt->execute(); // 遍历结果 while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "用户名:" . $row['name'] . ",邮箱:" . $row['email'] . "<br>"; } } catch(PDOException $e) { echo "执行出错: " . $e->getMessage(); } // 关闭连接 $conn = null;
几个注意事项
- 确保你的MySQL账号拥有
CREATE ROUTINE权限,不然phpMyAdmin会提示创建失败,需要联系服务器管理员或者用root账号授权 - 如果存储过程有输出参数(比如
OUT result_count INT),调用的时候要对应处理:mysqli用bind_result绑定输出变量,PDO需要在绑定参数时指定PDO::PARAM_INPUT_OUTPUT类型 - 存储过程里的SQL逻辑要做好参数校验,避免SQL注入风险(不过用预处理语句调用的话,已经能有效防范了)
内容的提问来源于stack exchange,提问作者Zyzzx
相关产品推荐
相关产品推荐

