Linux平臺使用Freetds連線SQL Server伺服器,相容PHP和Laravel
阿新 • • 發佈:2019-02-14
本文在CentOS 7 64bit和Laravel 4.2環境測試通過。
1.下載原始碼並解壓縮
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
tar zxvf freetds-stable.tgz
cd freetds-0.91
2.配置並生成makefile
./configure --with-tdsver=8.0 --enable-msdblib
3.編譯安裝
make
sudo make install
4.配置
預設安裝的配置檔案位於/usr/local/etc,在/usr/local/etc編輯freetds.conf 檔案,預設為
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For information about the layout of this file and its settings, # see the freetds.conf manpage "man freetds.conf". # Global settings are overridden by those in a database # server specific section [global] # TDS protocol version ; tds version = 4.2 # Whether to write a TDSDUMP file for diagnostic purposes # (setting this to /tmp is insecure on a multi-user system) ; dump file = /tmp/freetds.log ; debug flags = 0xffff # Command and connection timeouts ; timeout = 10 ; connect timeout = 10 # If you get out-of-memory errors, it may mean that your client # is trying to allocate a huge buffer for a TEXT field. # Try setting 'text size' to a more reasonable limit text size = 64512 # A typical Sybase server [egServer50] host = symachine.domain.com port = 5000 tds version = 5.0 # A typical Microsoft server [egServer70] host = ntmachine.domain.com port = 1433 tds version = 7.0
在檔案的最後位置新增如下配置,即可連線SQL Server 2000
[sql-server-2000]
host = 192.168.182.9
port = 1433
tds version = 7.0
如果要連線SQL Server 2005或2008,需要新增以下配置
[sql-server-2005]
host = 192.168.70.1
port = 1433
tds version = 8.0
4.測試
/usr/local/bin/tsql -S sql-server-2000 -U sa -P test
如果成功連線,將會出現以下提示
至此,FreeTDS已經是Linux具備連線SQL Server的功能了。locale is "zh_CN.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
5.編譯PHP擴充套件
PHP 5.4之後已經沒有原生支援的SQL Server的驅動了,因此需要手動編譯PHP原始碼的擴充套件新增對SQL Server的驅動支援。CentOS 7自帶的是5.4版本的PHP,因此我們通過編譯5.4版的PHP原始碼獲得擴充套件。
目前CentOS yum源裡最新的php是5.4.16,php可以通過yum安裝到系統
sudo yum install php php-devel php-fpm php-common php-mysql php-pdo libzip
php官網上最新的5.4版本是 5.4.39,下載原始碼到本地
wget http://cn2.php.net/distributions/php-5.4.39.tar.gz
解壓並進入擴充套件目錄
tar zxvf php-5.4.39.tar.gz
cd php-5.4.39/ext/mssql
使用phpize生成configure指令碼檔案
phpize
生成makefile
./configure
編譯
make
編譯之後將會在modules子目錄生成mssql.so擴充套件檔案。複製擴充套件檔案到php的擴充套件檔案目錄
sudo cp modules/mssql.so /usr/lib64/php/modules/
在/etc/php.d目錄下新建mssql.ini 檔案,輸入以下內容
; Enable mssql extension module
extension=mssql.so
這樣PHP就能載入SQL Server驅動了。使用如下程式碼測試PHP連線SQL Server。
<?php
header("Content-type: text/html; charset=utf-8");
$msdb=mssql_connect("sql-server-2000","sa","test");
if (!$msdb) {
echo "connect sqlserver error";
exit;
}
mssql_select_db("msdb",$msdb);
$result = mssql_query("SELECT top 5 * FROM employee", $msdb);
while($row = mssql_fetch_array($result)) {
var_dump($row);
}
mssql_free_result($result);
?>
程式碼中的資料庫配置資訊可以替換成別的。測試命令如下
php -f test-mssql.php
成功執行後將會打印出資料庫表中記錄資料。
目前原生PHP程式碼已經可以連線SQL Server了,但是Laravel還是不行,還需要再編譯生成一個pdo_dblib.so擴充套件驅動。
6.編譯pdo_dblib.so擴充套件適配Laravel
cd php-5.4.39/ext/pdo_dblib
./configure
make
sudo cp modules/pdo_dblib.so /usr/lib64/php/modules/
再到/etc/php.d下新建pdo_dblib.ini,輸入以下內容
; Enable pdo_dblib extension module
extension=pdo_dblib.so
再編輯Laravel的app/config/database.php檔案,將sqlsrv區域改為一下形式
'sqlsrv' => array(
'driver' => 'sqlsrv',
'host' => 'sql-server-2000',
'database' => 'msdb',
'username' => 'sa',
'password' => 'test',
'prefix' => '',
),
這樣Laravel也可以連線SQL Server了。