我有一个连接到外部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。
答案 0 :(得分:2)
SELinux阻止了与MSSQL的传出连接。
正确的解决方案是允许apache建立连接:
setsebool -P httpd_can_network_connect_db 1
-P
标志使规则保持不变,否则重新启动后规则将丢失。
答案 1 :(得分:0)
事实证明,这不是Laravel问题,而是SELinux问题。我按照this guide禁用了SELinux,然后我就可以在浏览器中访问我的项目了。
我知道这不是最好的解决方案,但它符合我的目的。