我有一个在Laravel开发的项目,我想将项目上传到Linux共享主机。
在我的项目中,我有2个连接到不同的数据库。首先是共享主机中的mysql数据库并且运行良好。第二个是访问另一个服务器的SQL Server数据库。所以对于第二个数据库我使用sqlsrv驱动程序,但我有问题把这个工作在linux共享主机,返回给我这个错误:
SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)
at PDO->__construct('dblib:host=IP:1433;dbname=DBNAME;charset=utf8', 'USER', 'PASSWORD', array(0, 2, 0, false))
我设置了这样的连接:
'DB2' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'IP'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'DBNAME'),
'username' => env('DB_USERNAME', 'USER'),
'password' => env('DB_PASSWORD', 'PASSWORD'),
'charset' => 'utf8',
'prefix' => '',
],
在此错误之前我有很多其他错误,因为这个连接,所以我必须添加一些扩展到PHP并更新到7.2版本。我还添加了一些PHP pear packages
。
下一张图片显示了我添加的扩展程序:
在我的本地机器上,我可以毫无问题地运行项目,并且两个连接都正常工作。
我该如何解决?
答案 0 :(得分:1)
我认为首先检查您的托管服务器php版本并尝试为PHP版本添加正确的PDO驱动程序。
如果您使用PHP版本7.1.7 for * 86架构,则将该.dll文件放入。
延长= php_pdo_sqlsrv_71_ts_ * 86.dll
如果你使用另一个版本的PHP,那么尝试放入一个正确的.dll文件,并声明为php.ini文件。
然后重启您的服务并运行它......
我希望它能帮到你......
答案 1 :(得分:0)
您应该在DB_HOST
文件中为sqlsrv驱动程序定义DB_PORT
和.env
个环境变量。目前,看起来默认值用于连接。 (默认值 - 是env()函数的第二个参数)。
附:请注意,如果使用两个不同的连接 - 变量名称应该不同,例如:
.env
内容:
...
MYSQL_DB_HOST=0.0.0.0
MYSQL_DB_PORT=3939
SQLSRV_DB_HOST=0.0.0.0
SQLSRV_DB_PORT=1433
...
config/database.php
内容:
...
'DB' => [
'driver' => 'mysql',
'host' => env('MYSQL_DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3939'),
'database' => env('DB_DATABASE', 'DBNAME'),
'username' => env('DB_USERNAME', 'USER'),
'password' => env('DB_PASSWORD', 'PASSWORD'),
'charset' => 'utf8',
'prefix' => '',
],
'DB2' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'DBNAME'),
'username' => env('DB_USERNAME', 'USER'),
'password' => env('DB_PASSWORD', 'PASSWORD'),
'charset' => 'utf8',
'prefix' => '',
],
...