首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

PHP 調用 MySQL 存儲過程完整實例:無參、輸入、輸出、INOUT 參數

     編輯:MySQL 綜合教學

MySQL 存儲過程封裝業務邏輯、減少網絡交互。本文提供 PHP 5.x + MySQL 5.x 環境下,四類參數模式的完整調用代碼實例。

環境準備


$conn = mysql_connect('localhost', 'root', 'root') or die('連接失敗');
mysql_select_db('test', $conn);
mysql_query("SET NAMES utf8");

實例一:無參數存儲過程


-- 創建
$sql = "
CREATE PROCEDURE myproc()
BEGIN
    INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
END";
mysql_query($sql);

-- 調用
mysql_query("CALL test.myproc()");
-- 執行後 user 表新增一行

實例二:IN 輸入參數


-- 創建:判斷分數及格
$sql = "
CREATE PROCEDURE myproc2(IN score INT)
BEGIN
    IF score >= 60 THEN
        SELECT 'pass';
    ELSE
        SELECT 'no';
    END IF;
END";
mysql_query($sql);

-- 調用
mysql_query("CALL test.myproc2(70)");
-- 結果集需在命令行或 mysqli_multi_query 中查看

實例三:OUT 輸出參數


-- 創建:設置輸出值
$sql = "
CREATE PROCEDURE myproc3(OUT score INT)
BEGIN
    SET score = 100;
END";
mysql_query($sql);

-- 調用:用戶變量 @score 接收
mysql_query("CALL test.myproc3(@score)");
$result = mysql_query("SELECT @score");
$row = mysql_fetch_array($result);
print_r($row);  // Array ( [0] => 100 [@score] => 100 )

實例四:INOUT 雙向參數


-- 創建:根據性別標誌查詢用戶
$sql = "
CREATE PROCEDURE myproc4(INOUT sexflag INT)
BEGIN
    SELECT * FROM user WHERE sex = sexflag;
END";
mysql_query($sql);

-- 調用:先設置會話變量
mysql_query("SET @sexflag = 1");
mysql_query("CALL test.myproc4(@sexflag)");
// 結果集直接返回,可在 mysql 客戶端查看

現代化改造建議(PHP 7+/8+ + MySQL 8.0)

  • 棄用 mysql_*,改用 mysqli 或 PDO:
    $mysqli = new mysqli('localhost','root','root','test');
  • 多結果集處理:$mysqli->multi_query("CALL proc(); SELECT @out;") 配合 next_result()。
  • 預編譯調用:$stmt = $mysqli->prepare("CALL proc(?,?)"); $stmt->bind_param('i', $in); $stmt->bind_result($out);
  • 異常處理:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 拋出異常替代 die()。

存儲過程優缺點速評

優點缺點
減少網絡往返調試困難(無 IDE 斷點)
邏輯集中、權限控制版本控制/代碼審查弱
減少應用層 SQL 拼接風險業務邏輯分散在 DB 層,擴展性受限

建議:核心高頻事務邏輯用存儲過程,複雜業務規則留在應用層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved