找不到驱动程序 Debian SQL Server PHP

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

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

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

而这个安装 ODBC 驱动程序: https ://learn.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

)


鸿蒙传说
浏览 196回答 3
3回答

青春有我

Debian 9/10安装 Sury APT 存储库sudo apt updatesudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-commonecho "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.listwget -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安装额外的所需模块(将 xx 更改为版本)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.2sudo update-alternatives --set phar /usr/bin/phar7.2sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2sudo update-alternatives --set phpize /usr/bin/phpize7.2sudo update-alternatives --set php-config /usr/bin/php-config7.2sudo apt install php7.2-devsudo pecl config-set php_ini /etc/php/7.2/fpm/php.inisudo pecl config-set ext_dir /usr/lib/php/20170718/sudo pecl -d php_sufix=7.2 install sqlsrvsudo pecl -d php_sufix=7.2 install pdo_sqlsrvsudo suprintf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.2/mods-available/sqlsrv.iniprintf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.2/mods-available/pdo_sqlsrv.iniexitsudo phpenmod -s fpm -v 7.2 sqlsrv pdo_sqlsrvsudo phpenmod -s apache2 -v 7.2 sqlsrv pdo_sqlsrvsudo phpenmod -s cli -v 7.2 sqlsrv pdo_sqlsrvsudo service php7.2-fpm restartsudo service apache2 restart对于 php 7.4:sudo update-alternatives --set php /usr/bin/php7.4sudo update-alternatives --set phar /usr/bin/phar7.4sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.4sudo update-alternatives --set phpize /usr/bin/phpize7.4sudo update-alternatives --set php-config /usr/bin/php-config7.4sudo apt install php7.4-devsudo pecl config-set php_ini /etc/php/7.4/fpm/php.inisudo pecl config-set ext_dir /usr/lib/php/20190902sudo pecl -d php_sufix=7.4 install sqlsrvsudo pecl -d php_sufix=7.4 install pdo_sqlsrvsudo suprintf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.iniprintf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.iniexitsudo phpenmod -s fpm -v 7.4 sqlsrv pdo_sqlsrvsudo phpenmod -s apache2 -v 7.4 sqlsrv pdo_sqlsrvsudo phpenmod -s cli -v 7.4 sqlsrv pdo_sqlsrvsudo service php7.4-fpm restartsudo service apache2 restart对于 php 8.0:sudo update-alternatives --set php /usr/bin/php8.0sudo update-alternatives --set phar /usr/bin/phar8.0sudo update-alternatives --set phar.phar /usr/bin/phar.phar8.0sudo update-alternatives --set phpize /usr/bin/phpize8.0sudo update-alternatives --set php-config /usr/bin/php-config8.0sudo apt install php8.0-devsudo pecl config-set php_ini /etc/php/8.0/fpm/php.inisudo pecl config-set ext_dir /usr/lib/php/20200930sudo pecl -d php_sufix=8.0 install sqlsrvsudo pecl -d php_sufix=8.0 install pdo_sqlsrvsudo suprintf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.iniprintf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.iniexitsudo phpenmod -s fpm -v 8.0 sqlsrv pdo_sqlsrvsudo phpenmod -s apache2 -v 8.0 sqlsrv pdo_sqlsrvsudo phpenmod -s cli -v 8.0 sqlsrv pdo_sqlsrvsudo service php8.0-fpm restartsudo service apache2 restart检查加载的模块php -m或者只是检查 sqlsrvphp -m | grep sqlsrv常见故障:pecl 扩展失败,因为已经安装只需卸载它:sudo pecl -d php_sufix=7.2 uninstall sqlsrvsudo pecl -d php_sufix=7.2 uninstall pdo_sqlsrvsudo pecl -d php_sufix=7.4 uninstall sqlsrvsudo pecl -d php_sufix=7.4 uninstall pdo_sqlsrvsudo pecl -d php_sufix=8.0 uninstall sqlsrvsudo pecl -d php_sufix=8.0 uninstall pdo_sqlsrv然后再试一次。

炎炎设计

原来问题出在 Apache 配置上。即使重新安装后,由于某种原因,我仍然加载了旧配置。我已经在 7.4 上安装了驱动程序,而 apache 仍在为 7.3 提供服务。我通过这样做解决了它:sudo a2dismod php7.3sudo a2enmod php7.4sudo service apache2 restart

慕尼黑的夜晚无繁华

请尝试以下操作,PDO.php在某个目录中创建一个 php 文件(例如:)并将以下内容插入其中:<?php&nbsp; &nbsp; print_r(PDO::getAvailableDrivers());?>然后按如下方式运行此文件:leo@alpha:~$ php PDO.php终端应返回一组可用的 PDO 驱动程序。这样您就可以检查 PHP 是否真的启用了 SQL 驱动程序。就我而言:Array(&nbsp; &nbsp; [0] => mysql&nbsp; &nbsp; [1] => pgsql&nbsp; &nbsp; [2] => sqlsrv)还要检查 Laravel 目录中的.env文件是否正确配置了到 SQL 服务器的连接参数...DB_CONNECTION=sqlsrvDB_HOST=localhostDB_PORT=1433DB_DATABASE=projectDB_USERNAME=saDB_PASSWORD=password我希望你能解决你的问题。* 编辑 1 *请尝试以下方法:首先,在 Web 服务器的根目录中创建一个文件(ex: index.php),并在其中插入以下内容:<?php&nbsp; &nbsp; php_info();?>通过浏览器访问该文件,它应该返回所有正在使用的php settings文件apache。PDO如果您已加载 SQL Server 驱动程序,请查看该部分。
打开App,查看更多内容
随时随地看视频慕课网APP