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

使用 PHP 呼叫資料庫預存程序:以 SQL Server 為例

     編輯:PHP 綜合知識

前言

在早期的 PHP 開發環境中(PHP 4 時代),開發者常面臨如何從 PHP 呼叫資料庫預存程序的需求。預存程序儲存在資料庫伺服器端,執行效率高、減少網路傳輸,但也有綁定特定資料庫、移植性較差的缺點。本文示範如何在 Windows 平台上,透過 PHP 的 COM 元件呼叫 ADO 物件,進而執行 SQL Server 的預存程序。

環境需求

  • Windows 作業系統(支援 COM/ActiveX)
  • PHP 已啟用 com_dotnet 延伸模組
  • SQL Server 資料庫伺服器(本範例使用 Northwind 範例資料庫)

建立簡單的預存程序

首先在 SQL Server 中建立一個預存程序,查詢客戶基本資料:

CREATE PROCEDURE [sp_mystoreprocedure] AS
SELECT companyname, contactname, city FROM customers

PHP 端呼叫程式碼

使用 COM("ADODB.Connection") 建立連線物件,透過 OLEDB 連線字串連接資料庫,然後直接執行預存程序名稱:

<?php
define("OLEDB_CONNECTION_STRING",
    "Provider=SQLOLEDB; Data Source=zzb; Initial Catalog=Northwind; User ID=sa; Password=");

$dbc = new COM("ADODB.Connection");
$dbc->Open(OLEDB_CONNECTION_STRING);

$command = "sp_mystoreprocedure";
$rs = $dbc->Execute($command); // 取得 Recordset

// 輸出 HTML 表格
echo '<table cellspacing="1" cellpadding="3" width="600" align="center" bgcolor="#000000" border="0">';
echo '<tr valign="bottom" bgcolor="#9999cc"><th>公司名稱</th><th>聯絡人</th><th>城市</th></tr>';

$i = 0;
while (!$rs->EOF) {
    $i++;
    $fld0 = $rs->Fields(0);
    $fld1 = $rs->Fields(1);
    $fld2 = $rs->Fields(2);

    $bg = ($i % 2 == 0) ? "#cccccc" : "#ffffff";
    echo "<tr valign='baseline' bgcolor='$bg'>";
    echo "<td bgcolor='#ccccff'><b>{$fld0->value}</b></td>";
    echo "<td align='center'>{$fld1->value}</td>";
    echo "<td align='center'>{$fld2->value}</td>";
    echo "</tr>";

    $rs->MoveNext();
}
echo "</table>";

$rs->Close();
$dbc->Close();
?>

注意事項與錯誤處理

  • 服務啟動:確認 SQL Server 服務正在執行。
  • 預存程序名稱拼寫:名稱錯誤會導致致命錯誤,且早期 PHP 錯誤訊息不明確,除錯困難。
  • 安全性:連線字串中包含帳號密碼,實際部署應存放於設定檔並限制存取權限。
  • 相容性:此做法僅適用於 Windows + PHP COM 擴充;跨平台專案建議改用 PDO 或原生驅動程式(如 sqlsrv、pdo_sqlsrv)。

現代化替代方案

現代 PHP(7.0+)建議使用 PDO 搭配 sqlsrv 驅動:

<?php
$dsn = "sqlsrv:Server=zzb;Database=Northwind";
$pdo = new PDO($dsn, "sa", "");
$stmt = $pdo->query("EXEC sp_mystoreprocedure");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // 處理資料
}
?>

PDO 提供參數綁定、例外處理、跨資料庫支援,是更佳的長期選擇。

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