【问题标题】:Laravel MSSQL Server Connection not workingLaravel MSSQL 服务器连接不起作用
【发布时间】:2020-06-01 12:37:30
【问题描述】:

Laravel 版本:7.13,SqlServer:2019

 SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: 
 An existing connection was forcibly closed by the remote host (SQL: select * from [users]).

以上是我收到的错误消息。

我用核心 php 试过了,效果很好。

下面是php代码。

<?php

$serverName = "MYPCNAME";
$connectionInfo = array( "Database"=>"DBNAME", "UID"=>"sa", "PWD"=>'MyPassword');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
     echo "Connection established.<br />";

     if(($result = sqlsrv_query($conn,"SELECT * FROM users")) !== false){
        while( $obj = sqlsrv_fetch_object( $result )) {
              echo $obj->name.'<br />';
        }
    }

}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}

?>

我认为 SQL Server 配置是正确的。我安装了 php_sqlsrv、php_pdo_sqlsrv 扩展,它们显示为安装在phpinfo()

这是我的 Laravel 配置。

DB_CONNECTION=sqlsrv
DB_HOST=MYPCNAME
DB_PORT=1433
DB_DATABASE=DBNAME
DB_USERNAME=sa
DB_PASSWORD=MyPassword

以下是数据库配置文件。

 'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST'),
            'port' => env('DB_PORT'),
            'database' => env('DB_DATABASE'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

我也尝试将DB_HOST 更改为127.0.0.1,但出现了同样的问题。 我打算从用户表中获取用户。


我的想法:我在核心 php 中用127.0.0.1 更改了服务器名称,它与 laravel 显示完全相同的错误。

谁能帮帮我? 谢谢

【问题讨论】:

  • 您是否尝试过更改您的 SQL Server 端口?
  • 在 TCP/IP 配置中?
  • 即使我更改了端口并重新启动了 SQLServer,核心 php 也运行良好。但不是 laravel。
  • 在核心 php 中,如果我更改 $serverName = "MYPCNAME, 1434",它会显示与 laravel 相同的问题。我刚刚将端口更改为 1434。似乎是端口问题。
  • 尝试运行php artisan tinker,让我看看你的环境变量的输出

标签: php sql-server laravel laravel-5 database-connection


【解决方案1】:

好的,我解决了问题。

当我设置DB_PORT=null 时,它起作用了。

但是,我还没有找到确切的答案。

这是关于它的帖子网址。

PHP Sqlsrv connection not working when specify port, instance

我认为主要原因是以上。 无论如何,如果我设置DB_PORT=null,它就会成功。

【讨论】:

  • sqlsrv 的 env 中不需要给 DB_PORT 参数本身。
  • 如果我们需要改变端口,那我们该怎么做呢?
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2021-09-21
  • 2021-09-24
  • 2012-10-06
  • 2015-02-09
相关资源
最近更新 更多