【问题标题】:Unable to connect SQLEXPRESS with Laravel 5.6无法将 SQLEXPRESS 与 Laravel 5.6 连接
【发布时间】:2018-05-31 13:01:20
【问题描述】:

我正在尝试将 Laravel 5.6 连接到我的 SQLEXPRESS。

当我尝试将表从 Laravel 迁移到 SQL 时,我收到此错误:

SQLSTATE[08001]: [Microsoft][ODBC Driver 13 for SQL Server]TCP 提供者:由于目标机器主动拒绝,无法建立连接。 (SQL: select * from sysobjects where type = 'U' and name = migrations)

我已经将sqlsrv extionsion安装到php并进行了测试:

<?php
$serverName = "MYNAME\\SQLEXPRESS"; 

$connectionInfo = array( "Database"=>"Portal", "UID"=>"sa", "PWD"=>"mySecretPwd");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

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

连接建立成功。

我还在 phpinfo() 中看到了扩展;

但如果使用此设置切换到 Laravel 5.6:

我的环境:

DB_CONNECTION=sqlsrv
DB_HOST=MYNAME\\SQLEXPRESS
DB_PORT=1433
DB_DATABASE=Portal
DB_USERNAME=sa
DB_PASSWORD=mySecredPwd

我的配置/数据库:

'default' => env('DB_CONNECTION', 'sqlsrv'),

 'connections' => [

        .....

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

    ],

我遇到了一个错误。 我的服务器配置管理器如下所示:

我还可以连接 SQL Server Management Studio 2017。

【问题讨论】:

  • 我认为这是一个错字,但您将 DB_DATABASE 参数设置为 forge,而它应该是 Portal
  • @JacobH:如果.env 中不存在值,这只是默认值。
  • 好吧,这似乎完全倒退了,提供一个默认值作为参数来覆盖存储在其他地方的设置。无论如何,也许尝试不使用实例?
  • 你能用你的 PHP 脚本与 $serverName = "MYNAME\\SQLEXPRESS,1433" 建立连接吗?
  • @Zhorov。如果我将 1433 端口添加到 $serverName 我得到与 Laravel 完全相同的错误

标签: php sql-server laravel ssms sqlsrv


【解决方案1】:

首先,找到默认实例的端口号:

  • 检查端口号。如果您有 MS SQL Server Management Studio,请在 master 数据库中执行:xp_readerrorlog 0, 1, N'Server is listening on'

  • 带命令提示符(会有很多行,但一定要分析):netstat -ano

可能的解决方案:

  • 停止 SQL Server Browser 服务并再次测试,始终使用端口号。如果 SQL Server 在端口 1433 上运行,您可以使用 TCP/IP 连接到默认实例
  • 设置 SQL Server 不使用动态端口并设置默认实例的端口号。
  • 更改 Laravel 中的配置/数据库以找到跳过端口号的方法。我没有使用 Laravel 的经验,但我认为您可以尝试使用 'port' =&gt; env('DB_PORT', null),

如何配置服务器监听特定端口:

  • 打开“计算机管理\服务\SQL Server 配置管理器”。
  • 展开“SQL Server Network Configuration\Protocols for [instance name]”并双击“TCP/IP”。在“TCP/IP 属性”对话框的“IP 地址”选项卡上,转到“IPAll”。将“TCP 动态端口”留空。将“TCP 端口”设置为所需的端口号(默认为 1433)。
  • 在“SQL Server 服务”中,双击 SQL Server Browser。在“服务”选项卡中,将“启动模式”设置为“手动”。
  • 在“SQL Server 服务”中,双击 SQL Server Browser。在“登录”中停止服务。
  • 在“SQL Server 服务”中,双击 SQL Server([实例名称])。在“登录”中重启服务。
  • 将客户端连接字符串设置为“server\instance,port”格式。

好的起点是: SQL Server Browser ServiceConfigure a Server to Listen on a Specific TCP Port

希望对你有帮助。

【讨论】:

  • 哇!这对我帮助很大。谢谢你。我的端口错了。我以为这是默认值 1433...我的端口是 61688。你知道我怎样才能将其更改为默认值吗?
  • @GregOstry 我已经更新了答案。这是我配置 SQL Server 的方法。
  • 对我帮助太大了。我必须手动设置 tcp 端口 1433。它根本不是默认设置。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 2019-03-31
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2018-08-07
相关资源
最近更新 更多