sqlsrv_connect 在 php 中工作正常,但在同一服务器(AWS EC2 实例)上的 laravel 中失败

sqlsrv_connect works fine in php but fails in laravel on the same server(AWS EC2 Instance)

我正在尝试连接 MSSQL 数据库作为我在 Laravel 中的第二个数据库,在核心 PHP 文件中它工作正常但是当我尝试在 laravel 中连接时它抛出一个错误。

Here is my .env
MSSQL_CONNECTION=sqlsrv
MSSQL_DATABASE_URL='/EC2AMAZ-61LPEGK\SQLEXPRESS'
MSSQL_HOST=XX.XX.X.XXX
MSSQL_PORT=1433
MSSQL_DATABASE="/dbcrm"
MSSQL_USERNAME="sauser"
MSSQL_PASSWORD='dbpassword123'
MSSQL_TRUSTSERVER='yes'
MSSQL_ENCRYPT=False
MSSQL_STRICT=false

and here is my laravel database config:
    'sqlsrv' => [
        'driver' => 'sqlsrv',
        'url' => env('MSSQL_DATABASE', '/EC2AMAZ-61LPEGK\SQLEXPRESS'),
        'host' => env('MSSQL_HOST', 'XX.XX.X.XXX'),
        'port' => env('MSSQL_HOSTDB_PORT', '1433'), //I had tried null
        'database' => env('MSSQL_DATABASE', '/dbcrm'), //tried without '/'
        'username' => env('MSSQL_USERNAME', 'sauser'),
        'password' => env('MSSQL_PASSWORD', 'dbpassword123'),
        'trust_server_certificate' => env('MSSQL_TRUSTSERVER', 'yes'), //tried 'no'
        'encrypt' => env('MSSQL_ENCRYPT', False), //tried true
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
    ],

这是 PHP 文件代码,可以正常工作并连接数据库并执行查询,

$host ="XX.XX.X.XXX";
$username ="sauser";
$password ="dbpassword123";
$database ="dbcrm";
$params = [
"UID" => $username,
"PWD" => $password,
"Database" => $database,
"TrustServerCertificate" => "yes",
];
if(sqlsrv_connect($host, $params)) {
echo "connected..";
} else {
echo "Connection could not be established.<br />";
echo "<pre>";
die( print_r( sqlsrv_errors(), true));
echo "</pre>";
}

我在这两种情况下使用相同的服务器,并且我有 installed/enabled SQLSRV。请查找 phpinfo 屏幕截图以供参考。

为什么它在 PHP 文件中有效,但在 Laravel 中无效。请帮忙。 注意:MSSQL 数据库安装在另一个 AWS windows 实例上并且启用了 TCP,端口号为 1433

这是我得到的错误,

终于找到问题所在了,发帖出来,希望能帮助那些已经被打了好几天、抓狂的人找到解决办法。

  1. 更改以下 .env 变量和数据库配置,

    MSSQL_ENCRYPT=是

    MSSQL_TRUSTSERVER=真

config/database.php

'trust_server_certificate' => env('MSSQL_TRUSTSERVER', true), //Some libraries accessing ODBC/JBDC require Yes/No settings, others True/False, 
'encrypt' => env('MSSQL_ENCRYPT', 'yes'), //same here try Yes/No or True/False