如何使用sqlsrv的共享主机设置Laravel?

时间:2018-03-29 12:05:44

标签: php sql-server laravel shared-hosting sqlsrv

我有一个在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

下一张图片显示了我添加的扩展程序:

enter image description here

在我的本地机器上,我可以毫无问题地运行项目,并且两个连接都正常工作。

我该如何解决?

2 个答案:

答案 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' => '',
        ],
...