Thinkphp6使用pdo_odbc連接SQL Server2000

最近做一個項目,採用了Thinkphp6框架,因爲要支持調用dll動態庫,使用了php7.4的ffi新功能(見文章:《php7.4使用FFI連接C語言的動態庫》),但是項目連接的數據庫是SQL Server2000,這是一個很老的項目,所以使用了這個版本的數據庫(就目前來說我也喜歡SQL Server2000,下載了一個綠色版解壓縮運行後整個目錄才137MB)。
然而在php裏怎麼連接這個數據庫呢?Thinkphp6內置了Sqlsrv的支持,只要配置config目錄裏的database.php即可。但是我最開始採用的是pdo調用php_sqlsrv_74_ts_x86和php_pdo_sqlsrv_74_ts_x86,這種方式太新了,還需要安裝一個ODBC驅動,可是這個驅動最低版本是11,11版也只能支持SQL Server2005版以及更新版本,並不支持SQL Server2000.
後來繼續各種百度,發現用pdo_odbc連接數據庫,就可以避免安裝這個驅動了,因爲odbc可以指定我採用哪個odbc驅動,而我的電腦裏默認就安裝了odbc,運行裏輸入odbcad32回車,就看到如下畫面:
在這裏插入圖片描述
可以看到自帶的驅動名稱爲SQL Server,那麼database.php裏的connections數組增加一個配置:

        'sqlserver' => [
            'type'     => 'sqlsrv',
            'dsn'      => 'odbc:Driver={SQL Server};Server=127.0.0.1,7788;Database=data_db',
            'username' => 'xxxx',
            'password' => 'xxxx',
        ],

啓用php.ini裏的extension=pdo_odbc(注意低版本的php可能配置寫成了extension=php_pdo_odbc.dll,檢查php的ext目錄的確有這個文件,如果是linux,可以安裝這個擴展)。
重啓apache,按照Thinkphp的規則寫代碼,即可訪問:

<?php
namespace app\model;

class Test extends \think\Model
{
	protected $connection = 'sqlserver';
	
}

//如下可以獲取,代碼自己組織:
function UTF8($gbkString) {
	return iconv('GB18030', 'UTF-8', $gbkString);
}
try {
	$rows = \app\model\Test::select()->toArray();
	foreach ($rows as $key => $row) {
		echo UTF8($row['name']) . ' ';
	}
} catch (\Exception $e) {
	return UTF8($e->getMessage());
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章