【问题标题】:Laravel sqlsrv works in tinker mode but not in browserLaravel sqlsrv 在修补模式下工作,但在浏览器中不工作
【发布时间】:2015-04-15 01:31:00
【问题描述】:

我有一个连接到外部 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';

我正在使用带有 unixODBC 的 FreeTDS。

【问题讨论】:

  • 你能添加你的数据库配置(没有密码/域)吗?
  • @Chris 我用信息更新了帖子。

标签: sql-server laravel-5 freetds sqlsrv


【解决方案1】:

SELinux 正在阻止您与 MSSQL 的传出连接。

正确的解决办法是让apache建立连接:

setsebool -P httpd_can_network_connect_db 1

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

【讨论】:

  • 这行得通,谢谢!我再次启用 SELinux 并运行此命令。成功了!
  • 我发现我仍然必须禁用 SELinux,因为它会阻止我的 PHP 脚本使用其他程序/二进制文件,如 wkhtmltopdf、cpdf 等。
【解决方案2】:

原来这不是 Laravel 问题,而是 SELinux 问题。我通过关注this guide 禁用了 SELinux,然后我可以在浏览器中访问我的项目。

我知道这不是最好的解决方案,但它适用于我的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2021-07-14
    • 1970-01-01
    • 2016-10-11
    • 2014-03-27
    • 2021-05-10
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多