首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 呼叫 MySQL 預存程序並取得結果集:mysqli 實戰範例

     編輯:MySQL 資料庫相關知識

版本前提

PHP 4 只能呼叫 Stored Procedure,無法取得結果集。PHP 5 引入 mysqli 擴展完整支援多結果集處理。

環境準備

  • 重新編譯 PHP 5 並 --with-mysqli,或動態載入 mysqli.so/php_mysqli.dll。
  • 確認 phpinfo() 出現 mysqli 區塊。

建立測試預存程序

DELIMITER //
CREATE PROCEDURE `yejr`()
BEGIN
    SHOW TABLES;
END //
DELIMITER ;

CALL yejr();
-- 輸出範例:
-- +------------------+
-- | Tables_in_test   |
-- +------------------+
-- | yejr1            |
-- | yejr2            |
-- +------------------+

mysqli 物件導向呼叫範例

query($query)) {
    while ($row = $result->fetch_row()) {
        printf("find table: %s\n", $row[0]);
    }
    $result->close();
}

// 若預存程序返回多個結果集,需用 next_result() 迭代
while ($mysqli->next_result()) {
    if ($res = $mysqli->store_result()) {
        while ($row = $res->fetch_row()) {
            // 處理後續結果集
        }
        $res->free();
    }
}
$mysqli->close();
?>

輸出結果

find table: yejr1
find table: yejr2

關鍵點提醒

  • CALL 語句後必須有分號,否則語法錯誤。
  • 預存程序若包含多個 SELECT,需用 next_result() + store_result() 逐個處理。
  • mysqli 亦支援預處理語句 prepare() + bind_param(),防止 SQL 注入。

遷移建議

現有 PHP 4 專案若大量依賴預存程序,升級 PHP 5 + mysqli 為最低成本方案;長期規劃建議採用 PDO 抽象層,支援多種資料庫驅動。

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