2023-05-31 05:21:18
在 PHP 中使用 MySQL 存储过程可以通过 PDO 或 MySQLi 扩展实现。以下是详细步骤和示例代码:
1. 使用 PDO 扩展调用存储过程<?php// 连接数据库$conn = new PDO('mysql:host=localhost;dbname=database_name;charset=utf8', 'username', 'password');// 设置存储过程名称(带参数示例)$procedure_name = 'get_customer_by_id';$customer_id = 123;// 准备调用语句(使用命名参数或问号占位符)$stmt = $conn->prepare("CALL $procedure_name(:id)");$stmt->bindParam(':id', $customer_id, PDO::PARAM_INT);// 执行存储过程$stmt->execute();// 处理结果集(多结果集需循环获取)do { $result = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($result) { print_r($result); // 输出结果 }} while ($stmt->nextRowset()); // 处理多结果集// 关闭连接$conn = null;?>关键点:假设存储过程 update_customer_status 接收输入参数 customer_id 和输出参数 status:
<?php// PDO 示例(输出参数需额外处理)$conn = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');$stmt = $conn->prepare("CALL update_customer_status(:id, @status)");$stmt->bindParam(':id', $customer_id, PDO::PARAM_INT);$stmt->execute();// 获取输出参数$result = $conn->query("SELECT @status AS status")->fetch(PDO::FETCH_ASSOC);echo "状态: " . $result['status'];// MySQLi 示例$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');$mysqli->query("CALL update_customer_status($customer_id, @status)");$result = $mysqli->query("SELECT @status AS status")->fetch_assoc();echo "状态: " . $result['status'];?>4. 注意事项通过以上方法,可以高效地在 PHP 中调用 MySQL 存储过程并处理结果。