我在 Ubuntu 20.04 上使用 PHP Laravel 7.4。并尝试从位于另一个云上的 Windows 服务器中的 SQL 服务器获取数据。
此方法在我的PC(Windows)上进行了测试,它成功地从Windows服务器获取了数据(如上所述),但是在我的ubuntu服务器上我遵循文档ubuntu 20.04 PHP 7.4 https://learn.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15
我收到此错误:
SQLSTATE[08001]:[Microsoft][SQL Server 的 ODBC 驱动程序 17]TCP 提供程序:错误代码 0x2746(SQL:myquery) {“userId”:94,“异常”:“[对象] (照亮\数据库\QueryException(代码:08001):SQLSTATE [08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序:错误代码 0x2746(SQL:myquery)位于 /var/www/web-api/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669)
我检查了 Microsoft SQL Server Management Studio 中的日志,我注意到每次我从 Ubuntu 发出请求时都会出现此消息
“从远程客户端收到 TLS 1.2 连接请求 应用程序,但客户端不支持任何密码套件 应用程序由服务器支持。 SSL 连接请求 失败了。”
尝试以下步骤:
安装 sqsrv 和 pdo_sqlsrv 扩展并重新启动 apache
更新并注释 config/database.php sqlsrv 数组中提到的行
'端口' => env('DB_PORT','1433'),
sqlsrv 驱动程序的最终值将是这样的:
'sqlsrv' => [
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
// 'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'prefix_indexes' => true,
],
在项目目录的命令行中点击这2个命令
composer dump-autoload
php artisan config:clear
使用docker与
thecodingmachine/php
8.0,我通过使用https://github.com/microsoft/msphpsql/issues/1023#issuecomment-732947905中的配置编辑
/etc/ssl/openssl.cnf
解决了这个问题
我认为在 Laravel 中使用 mssql 时我也遇到过类似的错误。我通过在计算机上安装并启用 mssql php 扩展解决了这个问题。也许会有帮助。
如果您使用 ip 访问远程数据库,请确保您的 wifi ip 已列入白名单,并且服务器或服务器为远程连接打开。