【问题标题】:SOLVED could not find driver Debian SQL Server PHP已解决找不到驱动程序 Debian SQL Server PHP
【发布时间】:2020-06-29 12:34:18
【问题描述】:

我在 Debian 9.9 服务器和 PHP 7.4 上运行 Laravel 安装。

我需要连接到远程 Windows 服务器上的 SQL Server 数据库。

我按照本指南安装 PHP 扩展: https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver15#installing-the-drivers-on-debian-8-9-and-10

还有这个安装 ODBC 驱动程序: https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

我也尝试过重新安装 PHP。

但是即使做了所有这些,我仍然无法连接到数据库并得到这个错误:

找不到驱动程序(SQL: select * from [table] where [column] = 123)

谢谢

编辑

这是 phpinfo() 的结果中提到 PDO 的行

PDO support => enabled
PDO drivers => mysql, sqlsrv

pdo_sqlsrv

pdo_sqlsrv support => enabled
ExtensionVer => 5.8.0

Directive => Local Value => Master Value
sqlsrv.ClientBufferMaxKBSize => 10240 => 10240
sqlsrv.LogSeverity => 0 => 0
sqlsrv.LogSubsystems => 0 => 0
sqlsrv.SetLocaleInfo => 2 => 2
sqlsrv.WarningsReturnAsErrors => On => On

php --ini 显示这两个扩展已启用:
/etc/php/7.4/cli/conf.d/pdo_sqlsrv.ini,
/etc/php/7.4/cli/conf.d/sqlsrv.ini

PDO::getAvailableDrivers() 返回以下内容:

Array
(
    [0] => mysql
    [1] => sqlsrv
)

【问题讨论】:

    标签: php laravel debian odbc sqlsrv


    【解决方案1】:

    请尝试以下方法,在某个目录中创建一个 php 文件(例如:PDO.php)并将以下内容插入其中:

    <?php
        print_r(PDO::getAvailableDrivers());
    ?>
    

    然后按如下方式运行这个文件:

    leo@alpha:~$ php PDO.php
    

    终端应返回可用 PDO 驱动程序的数组。这样您就可以检查 PHP 是否真的启用了 SQL 驱动程序。就我而言:

    Array
    (
        [0] => mysql
        [1] => pgsql
        [2] => sqlsrv
    )
    

    还要检查 Laravel 目录下,.env 文件是否正确配置了到 SQL server 的连接参数...

    DB_CONNECTION=sqlsrv
    DB_HOST=localhost
    DB_PORT=1433
    DB_DATABASE=project
    DB_USERNAME=sa
    DB_PASSWORD=password
    

    希望你能解决你的问题。

    * 编辑 1 *

    请尝试以下方法:

    首先,在您的网络服务器的根目录中创建一个文件(ex: index.php),并在其中插入以下内容:

    <?php
        php_info();
    ?>
    

    通过浏览器访问该文件,它应该返回apache 正在使用的所有php settings。查看PDO 部分,如果您已加载 SQL Server 驱动程序..

    【讨论】:

    • 感谢您的回答,运行 pdo.php 时,我得到 mysqlsqlsrv。所以驱动存在。
    • 这是一个很好的指示,现在您只需检查.env文件中的值是否正确
    • Database.php 和 .env 应该 没问题,完全相同的配置在 macOS 和另一台运行 Ubuntu 的计算机上运行良好
    • 只是出于好奇,当您收到该错误时,您使用的是什么操作系统?
    • 运行 PHP 的服务器是 Debian 9.9 版。该数据库位于 Windows 10 Server 上
    【解决方案2】:

    原来问题出在 Apache 配置上。 即使重新安装后,由于某种原因,我仍然加载了旧配置。 我已经在 7.4 上安装了驱动程序,而 apache 仍在为 7.3 提供服务。

    我通过这样做解决了它:

    sudo a2dismod php7.3
    sudo a2enmod php7.4
    sudo service apache2 restart
    

    【讨论】:

      【解决方案3】:

      Debian 9/10

      安装 Sury APT 存储库

      sudo apt update
      sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
      echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
      wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
      sudo apt update
      

      安装你想要的 php 版本

      sudo apt install php7.2  php7.4  php8.0
      

      安装额外的所需模块(将 x.x 更改为版本)

      sudo apt install phpx.x-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip}
      

      对于 php 7.2:

      sudo update-alternatives --set php /usr/bin/php7.2
      sudo update-alternatives --set phar /usr/bin/phar7.2
      sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
      sudo update-alternatives --set phpize /usr/bin/phpize7.2
      sudo update-alternatives --set php-config /usr/bin/php-config7.2
      
      sudo apt install php7.2-dev
      
      sudo pecl config-set php_ini /etc/php/7.2/fpm/php.ini
      sudo pecl config-set ext_dir /usr/lib/php/20170718/
      
      sudo pecl -d php_sufix=7.2 install sqlsrv
      sudo pecl -d php_sufix=7.2 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 -s fpm -v 7.2 sqlsrv pdo_sqlsrv
      sudo phpenmod -s apache2 -v 7.2 sqlsrv pdo_sqlsrv
      sudo phpenmod -s cli -v 7.2 sqlsrv pdo_sqlsrv
      
      sudo service php7.2-fpm restart
      sudo service apache2 restart
      

      对于 php 7.4:

      sudo update-alternatives --set php /usr/bin/php7.4
      sudo update-alternatives --set phar /usr/bin/phar7.4
      sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.4
      sudo update-alternatives --set phpize /usr/bin/phpize7.4
      sudo update-alternatives --set php-config /usr/bin/php-config7.4
      
      sudo apt install php7.4-dev
      
      sudo pecl config-set php_ini /etc/php/7.4/fpm/php.ini
      sudo pecl config-set ext_dir /usr/lib/php/20190902
      
      sudo pecl -d php_sufix=7.4 install sqlsrv
      sudo pecl -d php_sufix=7.4 install pdo_sqlsrv
      sudo su
      printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
      printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
      exit
      sudo phpenmod -s fpm -v 7.4 sqlsrv pdo_sqlsrv
      sudo phpenmod -s apache2 -v 7.4 sqlsrv pdo_sqlsrv
      sudo phpenmod -s cli -v 7.4 sqlsrv pdo_sqlsrv
      
      sudo service php7.4-fpm restart
      sudo service apache2 restart
      

      对于 php 8.0:

      sudo update-alternatives --set php /usr/bin/php8.0
      sudo update-alternatives --set phar /usr/bin/phar8.0
      sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.0
      sudo update-alternatives --set phpize /usr/bin/phpize8.0
      sudo update-alternatives --set php-config /usr/bin/php-config8.0
      
      sudo apt install php8.0-dev
      
      sudo pecl config-set php_ini /etc/php/8.0/fpm/php.ini
      sudo pecl config-set ext_dir /usr/lib/php/20200930
      
      sudo pecl -d php_sufix=8.0 install sqlsrv
      sudo pecl -d php_sufix=8.0 install pdo_sqlsrv
      sudo su
      printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
      printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
      exit
      sudo phpenmod -s fpm -v 8.0 sqlsrv pdo_sqlsrv
      sudo phpenmod -s apache2 -v 8.0 sqlsrv pdo_sqlsrv
      sudo phpenmod -s cli -v 8.0 sqlsrv pdo_sqlsrv
      
      sudo service php8.0-fpm restart
      sudo service apache2 restart
      

      检查加载的模块

      php -m
      

      或者只检查 sqlsrv

      php -m | grep sqlsrv
      

      常见问题:

      pecl 扩展失败,因为已经安装

      只需卸载它:

      sudo pecl -d php_sufix=7.2 uninstall sqlsrv
      sudo pecl -d php_sufix=7.2 uninstall pdo_sqlsrv
      
      sudo pecl -d php_sufix=7.4 uninstall sqlsrv
      sudo pecl -d php_sufix=7.4 uninstall pdo_sqlsrv
      
      sudo pecl -d php_sufix=8.0 uninstall sqlsrv
      sudo pecl -d php_sufix=8.0 uninstall pdo_sqlsrv
      

      然后再试一次。

      【讨论】:

        猜你喜欢
        • 2018-12-29
        • 2017-05-28
        • 2017-02-13
        • 2018-05-27
        • 1970-01-01
        • 2020-09-09
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多