Laravel 5.6无法从PHP / Laravel连接MS SQL Server 2008 R2

时间:2018-03-06 13:41:45

标签: php laravel sql-server-2008

我正在使用Laravel 5.6,并尝试连接MS SQL Server 2008 R2,所有这些都在本地计算机上运行。我有一个名为“ItemMaster”的测试数据库,它与我的C#.Net应用程序一起工作正常。

当我尝试从Laravel连接相同的数据库时,我收到此错误:

SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: No connection could be made because the target machine actively refused it. (SQL: select * from ITEM_CATEGORY)

有人可以建议如何解决这个问题。

在config / database.php中,我设置了sqlsrv驱动程序,如下所示:

'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'MY-PC\MYSQL2008R2'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'ITEMMASTER'),
            'username' => env('DB_USERNAME', 'myuser'),
            'password' => env('DB_PASSWORD', 'mypassword'),
            'charset' => 'utf8',
            'prefix' => '',
        ],

在我的控制器内的这一行上获取错误:

$items = DB::connection('sqlsrv')->select('select * from ITEM_CATEGORY');

我安装了Microsoft Drivers 4.3 for PHP for SQL Server并将文件php_pdo_sqlsrv_71_ts_x86.dll复制到php/ext文件夹。

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法,分享可能有助于其他人犯同样的错误。

实际上,错误是我在config/database.php

中定义SQL连接参数的方式
'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'MY-PC\MYSQL2008R2'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'ITEMMASTER'),
            'username' => env('DB_USERNAME', 'myuser'),
            'password' => env('DB_PASSWORD', 'mypassword'),
            'charset' => 'utf8',
            'prefix' => '',
        ],

在这个代码段中,我实际上将我的参数定义为env()的第二个参数,其中(be-definition)不是实际值,但如果在{{中找不到该特定键,则将用作默认值1}}文件。

您可以阅读有关环境配置here

的更多信息

所以最后的代码段应该是这样的:

.env

或者另一种选择可能是在应用程序的根目录中的'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => 'MY-PC\MYSQL2008R2', 'port' => '1433', 'database' => 'ITEMMASTER', 'username' => 'myuser', 'password' => 'mypassword', 'charset' => 'utf8', 'prefix' => '', ], 文件中定义这些参数。