客戶端操作流程
# 1. 登入
mysql -u user -p
# 2. 選庫
mysql> USE test;
# 3. 查看現有存儲過程
mysql> SHOW PROCEDURE STATUS WHERE Db='test';
# 4. 創建簡單存儲過程
mysql> CREATE PROCEDURE hi() SELECT 'hello';
# 5. 調用
mysql> CALL hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
進階特性與 PHP 應用
- 一次調用執行多條 SQL:減少網絡往返,提升性能
- 多結果集返回:必須使用 PHP
mysqli 擴展,舊 mysql 擴展不支持,會報錯 can't return a result set in the given context
mysqli 多結果集處理示例
$mysqli = new mysqli("localhost", "user", "pass", "db");
# 調用返回多結果集的存儲過程
if ($mysqli->multi_query("CALL multi_result_proc()")) {
do {
if ($result = $mysqli->store_result()) {
# 處理當前結果集
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
# 檢查是否有下一結果集
if ($mysqli->more_results()) {
echo "--- Next Result Set ---\n";
}
} while ($mysqli->next_result());
}
$mysqli->close();
關鍵遷移建議
- 新項目直接使用
mysqli 或 PDO_MySQL,棄用舊 mysql 擴展(PHP 7.0+ 已移除)。
- 存儲過程中涉及多
SELECT、SHOW、EXPLAIN 等返回結果集的語句時,客戶端必須用 multi_query/next_result 循環獲取。
- 預處理語句
mysqli::prepare 結合存儲過程調用可防注入、提升重複執行性能。