Laravel sqlsrv在修补模式下工作,但不在浏览器中工作

时间:2015-04-15 01:31:00

标签: sql-server laravel-5 freetds sqlsrv

我有一个连接到外部MSSQL数据库的Laravel 5项目(在CentOS 7机器上)。

我使用FreeTDS跟踪了here概述的设置。

当我使用浏览器点击页面时,我收到错误:SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9)

但是,当我使用php artisan tinker并执行App\MyModel::get();之类的操作时,它会返回一个Illuminate\Database\Eloquent\Collection实例,其记录/模型就可以了。

有人知道这有什么问题吗?

更新 我的.env如下所示:

SQLSRV_DB_DRIVER=sqlsrv
SQLSRV_DB_HOST=host.ip.address
SQLSRV_DB_DATABASE=my_db
SQLSRV_DB_USERNAME=my_username
SQLSRV_DB_PASSWORD=my_password

我的config/database.php看起来像:

'sqlsrv' => [
        'driver'   => env('SQLSRV_DB_DRIVER'),
        'host'     => env('SQLSRV_DB_HOST'),
        'database' => env('SQLSRV_DB_DATABASE'),
        'username' => env('SQLSRV_DB_USERNAME'),
        'password' => env('SQLSRV_DB_PASSWORD'),
        'prefix'   => '',
];

我的模型指定了连接:protected $connection = 'sqlsrv';

我正在使用FreeTDS和unixODBC。

2 个答案:

答案 0 :(得分:2)

SELinux阻止了与MSSQL的传出连接。

正确的解决方案是允许apache建立连接:

setsebool -P httpd_can_network_connect_db 1

-P标志使规则保持不变,否则重新启动后规则将丢失。

答案 1 :(得分:0)

事实证明,这不是Laravel问题,而是SELinux问题。我按照this guide禁用了SELinux,然后我就可以在浏览器中访问我的项目了。

我知道这不是最好的解决方案,但它符合我的目的。