天天看點

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回車,就看到如下畫面:

Thinkphp6使用pdo_odbc連接配接SQL Server2000

可以看到自帶的驅動名稱為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());
}