【问题标题】:How to connect MSSQL in Laravel homestead?如何在 Laravel 宅基地连接 MSSQL?
【发布时间】:2016-04-05 10:52:53
【问题描述】:

我正在尝试使用 laravel homestead 连接 MSSQL 数据库。它总是抛出异常:

Connector.php 第 55 行中的 PDOException:找不到驱动程序。

我看到很多人谈论 FreeTDS 和 Sybase 驱动程序,但我似乎无法弄清楚我需要什么才能从运行 Laravel Homestead Vagrant 框的 Linux Web 服务器启用 laravel/php 访问 MSSQL 数据库.

【问题讨论】:

    标签: sql-server laravel homestead


    【解决方案1】:

    以下适用于 php72。您可以尝试在命令中更改 php 的版本。

    vagrant ssh
    
    #set the default PHP version to 7.2
    php72
    
    sudo su
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
    
    #Download appropriate package for the OS version
    #Choose only ONE of the following, corresponding to your OS version
    
    #Ubuntu 16.04
    curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    #Ubuntu 18.04
    curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    #Ubuntu 20.04
    curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    exit
    sudo apt-get update
    sudo ACCEPT_EULA=Y apt-get install msodbcsql17
    
    sudo ACCEPT_EULA=Y apt-get install mssql-tools
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    source ~/.bashrc
    
    sudo apt-get install unixodbc-dev
    
    sudo pecl config-set php_ini /etc/php/7.2/fpm/php.ini
    sudo pecl install sqlsrv
    sudo pecl install pdo_sqlsrv
    sudo su
    printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.2/mods-available/sqlsrv.ini
    printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.2/mods-available/pdo_sqlsrv.ini
    exit
    sudo phpenmod -v 7.2 sqlsrv pdo_sqlsrv
    
    sudo systemctl restart php7.2-fpm
    
    # restart nginx, if needed:
    sudo systemctl restart nginx.service
    

    参考资料:

    1. https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15#ubuntu17

    2. https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15#installing-the-drivers-on-ubuntu-1604-1804-and-2004

    【讨论】:

    • 最新更新:pecl/sqlsrv 现在需要 PHP(版本 >= 7.4.0)。因此,请使用 php 最低 7.4 版本。在上述脚本中,将 7.2 更改为 7.4 或更高版本。
    【解决方案2】:

    为了解决这个问题,我做了很多研发工作。终于找到解决办法了:

    Laravel vagrant 使用的是 php 7。为了支持 mssql,我们必须为 linux 启用相关的 sybase 驱动程序:

    为 PHP 7 启用 MSSQL 支持:

    首先,从 Homestead 文件夹 ssh 到您的 box vagrant ssh。

    命令:vagrant ssh

    安装 Sybase 包以启用对 PDO 和 Mssql 的支持。

    命令:sudo apt-get install php7.0-sybase

    然后在 ssh 上运行 php -m 以确保 pdo_dblib 已启用。

    全部完成!!!!干杯

    【讨论】:

    【解决方案3】:

    Laravel 使用 PDO 扩展连接数据库,你可以使用检查扩展是否启用

    var_dump(class_exists('PDO'))
    

    另外,如果你能发布具体的错误,那就太好了。

    【讨论】:

    • 不过,Homestead 应该启用 PDO。
    • var_dump (class_exists('PDO')) 结果:/home/vagrant/Code/Laravel/app/Http/Controllers/TestController.php:22:boolean true
    • Connector.php 第 55 行中的 PDOException:在 PDO->__construct('sqlsrv:Server=192.168.1.10\sql2014;Database=unvmc_siam', 'sa ', 'FGG', array('0', '2', '0', false)) 在 Connector.php 第 55 行
    【解决方案4】:

    谢谢你。至今仍适用于:

    1. php7.2-sybase

    2. 使用 DB_HOST= IP_ADDRESS\NAMED_INSTANCE

    3. 注释掉 .env 和 database.php 中的 PORT 指令

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-26
      • 2017-04-24
      • 2016-08-24
      • 1970-01-01
      • 2019-02-18
      • 2016-04-17
      • 2019-06-15
      • 2015-12-09
      相关资源
      最近更新 更多