# Linux下如何使用PHP訪問SQL Server
## 前言
在企業級應用開發中,經常需要跨平臺訪問不同類型的數據庫。雖然PHP與MySQL的組合更為常見,但在某些場景下(如對接企業現有SQL Server數據庫時),我們需要在Linux環境下通過PHP連接SQL Server。本文將詳細介紹在Linux系統中配置PHP與SQL Server通信的完整流程。
---
## 一、環境準備
### 1.1 系統要求
- Linux發行版(Ubuntu/CentOS等)
- PHP 7.0+(推薦7.4或8.0+)
- SQL Server 2008+(建議2016以上版本)
### 1.2 安裝必要組件
```bash
# Ubuntu/Debian
sudo apt-get install -y php php-dev unixodbc-dev
# CentOS/RHEL
sudo yum install -y php php-devel unixODBC-devel
Microsoft官方提供了Linux版的ODBC驅動,這是連接SQL Server的關鍵組件。
# Ubuntu 20.04
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo curl -o /etc/apt/sources.list.d/mssql-release.list \
https://packages.microsoft.com/config/ubuntu/20.04/prod.list
# CentOS 7
sudo curl -o /etc/yum.repos.d/mssql-release.repo \
https://packages.microsoft.com/config/rhel/7/prod.repo
# Ubuntu
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools
# CentOS
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
sudo ACCEPT_EULA=Y yum install -y msodbcsql17 mssql-tools
odbcinst -q -d -n "ODBC Driver 17 for SQL Server"
從PECL獲取最新版:
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
或手動下載:
wget https://pecl.php.net/get/sqlsrv-5.10.1.tgz
tar -xzvf sqlsrv-5.10.1.tgz
cd sqlsrv-5.10.1/
phpize
./configure
make
sudo make install
在php.ini
中添加:
extension=sqlsrv.so
extension=pdo_sqlsrv.so
驗證加載:
php -m | grep sqlsrv
<?php
$serverName = "your_server_ip,1433";
$connectionOptions = [
"Database" => "your_database",
"Uid" => "sa",
"PWD" => "your_password"
];
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
die(print_r(sqlsrv_errors(), true));
} else {
echo "連接成功!";
}
?>
try {
$conn = new PDO(
"sqlsrv:Server=your_server_ip,1433;Database=your_db",
"sa",
"your_password"
);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("連接失敗: " . $e->getMessage());
}
在連接字符串中添加超時參數:
"LoginTimeout" => 30
現代SQL Server默認要求加密連接,可在連接選項中禁用(不推薦):
"Encrypt" => false
或正確配置證書:
sudo curl -o /etc/ssl/certs/microsoft.cer \
https://curl.haxx.se/ca/cacert.pem
指定字符集:
"CharacterSet" => "UTF-8"
sqlsrv_connect
的ConnectionPooling
選項啟用示例批處理:
$params = [ [$_POST['name'], $_POST['price']] ];
$stmt = sqlsrv_prepare(
$conn,
"INSERT INTO Products (Name, Price) VALUES (?, ?)",
$params
);
if (sqlsrv_execute($stmt) === false) {
// 錯誤處理
}
推薦使用環境變量存儲密碼:
getenv('DB_PASSWORD')
通過本文的步驟,您已經成功在Linux系統上配置了PHP與SQL Server的連接。這種跨平臺方案不僅擴展了PHP的應用場景,還能有效利用SQL Server在企業環境中的優勢。當遇到問題時,建議查閱:
在實際生產環境中,建議進行充分的測試和性能評估,確保系統穩定可靠。 “`
注:本文實際約1500字,可根據需要調整具體章節的詳細程度。代碼塊中的服務器地址、用戶名密碼等需要替換為實際值。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。