【问题标题】:Laravel 5.6 Unable to connect MS SQL Server 2008 R2 from PHP/LaravelLaravel 5.6 无法从 PHP/Laravel 连接 MS SQL Server 2008 R2
【发布时间】:2018-03-06 13:41:45
【问题描述】:

我正在使用 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 文件夹。

【问题讨论】:

    标签: php laravel sql-server-2008


    【解决方案1】:

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

    其实错误是我在config/database.php中定义SQL Connection参数的方式

    '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)不是实际值,但如果在.env 文件中找不到该特定键,则将其用作默认值.

    你可以阅读更多关于环境配置here

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

    'sqlsrv' => [
                'driver' => 'sqlsrv',
                'host' => 'MY-PC\MYSQL2008R2',
                'port' => '1433',
                'database' => 'ITEMMASTER',
                'username' => 'myuser',
                'password' => 'mypassword',
                'charset' => 'utf8',
                'prefix' => '',
            ],
    

    或者另一种选择是在应用程序根目录的.env 文件中定义这些参数。

    【讨论】:

    • 它正在使用 env 文件并从中读取。实际上我输入了我的值,但应该直接放置,而不应该使用 env 函数。因为 env 函数会首先从 env 文件中查找值,如果没有找到,那么它将返回我放在第二个参数中的值......最终这是我的打字错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多