2016/06/24

[Laravel] 如何連接 SQL Server 資料庫及注意事項

通常開發 Laravel 使用的資料庫大多為 MySQL 或是 Sqlite, 今天遇到網友發問連線至 MS SQL Server 的問題.

我好像也沒真正去連 SQL Server, 那麼就來手動測試一下連線至 MS SQL Server 看看吧!

環境:

  • Windows 10
  • SQL Server 2014
  • Apache 2.4.18 (Win32)
  • Laravel 5.2.39
  • PHP 5.6.9 / Microsoft PHP Driver for SQL Server v3.2
  • PHP 7.0.6 / Microsoft Drivers for PHP for SQL Server v4.0.4

必備元件:

下載 Microsoft PHP Driver for SQL Server



現在官網上的下載版本只支援到 PHP v5.6, 所以只能下載 3.2 版本, 測試的 PHP 版本為 5.6.x

另外若是使用 PHP 7 的朋友, 可以到 GitHub 下載 Azure/msphpsql v4.x 的版本

https://github.com/Azure/msphpsql/tree/v4.0.4

PHP - php.ini 設定

檢查版本資訊



以上圖為例: 我需要符合 PHP 7.0.6 NTS 的版本


將檔案放至 php 的 ext/ 資料夾, 修改 php.ini 加上:

`extension=php_pdo_sqlsrv_7_nts.dll`

重新啟用 server 即可

查看 phpinfo() 即可得到支援的版本資訊



Laravel database 設定

修改 config/database.php

加上 sqlsrv 的設定區塊

'sqlsrv' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '1433'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'prefix' => '',
],

修改 .env 的 DB 設定

DB_CONNECTION=sqlsrv

其他參數依需求變更

測試連線讀取資料


Route::get('/', function () {
    var_dump( DB::table('Products')->first() );
});

這裡是讀取資料表 Products 取得第一筆資料, 如果設定正確, 你將會看到印出的物件資料

若是 Driver 沒有設定正確會得到錯誤: could not find driver


若是遇到的 PDOException : SQLSTATE[08001]



這是跟網友遇到的問題是一樣的:
SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: 無法連線,因為目標電腦拒絕連線。

解決 TCP Provider 無法連線:

看到 TCP Provider 的問題, 在很久以前曾經遇過, 只要開啟 Sql Server Configuration Manager 組態管理員, 啟用 SQL Server 網路組態 的 TCP/IP 通訊協定即可



沒有留言:

張貼留言