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

如何通过phpMyAdmin界面使用存储过程及PHP调用方法

用phpMyAdmin创建存储过程并在PHP中调用

我之前也遇到过和你一样的问题——找了好多资料都没讲清楚phpMyAdmin的Add Routine窗口怎么填,后来自己摸索出来了,还整理了PHP调用的方法,分享给你:

一、通过phpMyAdmin的Add Routine创建存储过程

步骤其实很直观,跟着下面的细节填就行:

  1. 打开目标数据库,在顶部导航栏找到Routines选项卡,点击进入后,右上角有个「Add routine」按钮,点击弹出创建窗口。
  2. 逐个填写窗口里的关键项:
    • 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 = ?,那这里就写:
      BEGIN
          SELECT name, email FROM users WHERE id = user_id;
      END;
      
      👉 注意:如果你的存储过程包含多条SQL语句,一定要修改窗口底部的Delimiter(默认是;),改成//或者$$,不然MySQL会把第一个分号当成存储过程的结束符,导致语法错误。比如把Delimiter改成$$,定义部分就写成BEGIN ... END$$
    • Security type:默认选DEFINER就行,它代表用创建者的权限执行;如果想让调用者用自己的权限执行,选INVOKER
  3. 所有项填完后,点击「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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:40:27