找不到驱动程序 Debian SQL 服务器 PHP
could not find driver Debian SQL Server PHP
我在 Debian 9.9 服务器和 PHP 7.4 上安装了 Laravel 运行。
我需要连接到远程 Windows 服务器上的 SQL 服务器数据库。
我按照本指南安装了 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。
但即使做了所有这些,我仍然无法连接到数据库并收到此错误:
could not find driver (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() returns 以下内容:
Array
(
[0] => mysql
[1] => sqlsrv
)
请尝试以下操作,在某个目录中创建一个 php 文件(例如:PDO.php
)并向其中插入以下内容:
<?php
print_r(PDO::getAvailableDrivers());
?>
然后运行这个文件如下:
leo@alpha:~$ php PDO.php
终端应 return 一组可用的 PDO 驱动程序。这样你就可以检查 PHP 是否真的启用了 SQL 驱动程序。就我而言:
Array
(
[0] => mysql
[1] => pgsql
[2] => sqlsrv
)
还要检查 Laravel 目录中的 .env
文件是否正确配置了 SQL 服务器的连接参数 ...
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();
?>
通过浏览器访问该文件,return apache
正在使用的所有 php settings
。查看 PDO
部分,如果您加载了 SQL 服务器驱动程序 ..
原来是 Apache 配置的问题。
即使在重新安装之后,由于某种原因我仍然加载了旧配置。
我已经在 7.4 上安装了驱动程序,而 apache 仍在为 7.3 服务。
我解决了这个问题:
sudo a2dismod php7.3
sudo a2enmod php7.4
sudo service apache2 restart
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
然后再试一次。
我在 Debian 9.9 服务器和 PHP 7.4 上安装了 Laravel 运行。
我需要连接到远程 Windows 服务器上的 SQL 服务器数据库。
我按照本指南安装了 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。
但即使做了所有这些,我仍然无法连接到数据库并收到此错误:
could not find driver
(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() returns 以下内容:
Array
(
[0] => mysql
[1] => sqlsrv
)
请尝试以下操作,在某个目录中创建一个 php 文件(例如:PDO.php
)并向其中插入以下内容:
<?php
print_r(PDO::getAvailableDrivers());
?>
然后运行这个文件如下:
leo@alpha:~$ php PDO.php
终端应 return 一组可用的 PDO 驱动程序。这样你就可以检查 PHP 是否真的启用了 SQL 驱动程序。就我而言:
Array
(
[0] => mysql
[1] => pgsql
[2] => sqlsrv
)
还要检查 Laravel 目录中的 .env
文件是否正确配置了 SQL 服务器的连接参数 ...
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();
?>
通过浏览器访问该文件,return apache
正在使用的所有 php settings
。查看 PDO
部分,如果您加载了 SQL 服务器驱动程序 ..
原来是 Apache 配置的问题。 即使在重新安装之后,由于某种原因我仍然加载了旧配置。 我已经在 7.4 上安装了驱动程序,而 apache 仍在为 7.3 服务。
我解决了这个问题:
sudo a2dismod php7.3
sudo a2enmod php7.4
sudo service apache2 restart
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
然后再试一次。