未捕获的PDOException:找不到驱动程序

时间:2016-08-22 22:34:38

标签: php mysql pdo percona

我刚安装了一个带Nginx的Ubuntu Server 16.04,我已经用这种方式安装了php:

sudo apt-get install php7.0-cli php7.0-cgi php7.0-fpm php7.0-curl

对于MySql,我已经以这种方式安装了percona:

apt-get install percona-server-server-5.7 percona-server-client-5.7

但我无法理解为什么我不能在我的php脚本中使用PDO,这是我的代码:

$db = new PDO("mysql:dbname=db;host=localhost;charset=utf8", "username", "password");

我收到此错误:

Uncaught PDOException: could not find driver

我在网上搜索过,我发现我必须在php.ini中取消注释这一行:

;extension=php_pdo_mysql.dll

或Linux上的这一行:

;extension=php_pdo_mysql.so

我已经检查了我的php.ini:

/etc/php/7.0/fpm/php.ini

我有一个.dll文件而不是.so文件,我也不明白为什么我有一个dll而不是一个。无论如何启用.dll文件并重新启动php没有任何变化。有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:1)

安装mysql客户端/服务器包不会影响PHP。 PHP仍然需要绑定来与您的mysql服务器通信,特别是在您的情况下是PDO mysql驱动程序。

该软件包可能会被称为php7.0-pdo-mysql,具体取决于您的Ubuntu软件包管理器配置了哪些存储库。如果你在Ubuntu 16.04上使用PHP 7,它很可能会成为包含php7.0-mysql的元数据包。这是我在16.04使用Ondrej PPA从aptitude获得的。

aptitude show php7.0-pdo-mysql

Package: php7.0-mysql                    
State: installed
Automatically installed: no
Version: 7.0.9-1+deb.sury.org~trusty+1
Priority: optional
Section: php
Maintainer: Debian PHP Maintainers 
Architecture: amd64
Uncompressed Size: 514 k
Depends: php-common (>= 1:35), ucf, php7.0-common, libc6 (>= 2.15)
Provides: php-mysqli, php-mysqlnd, php-pdo-mysql, php7.0-mysqli, php7.0-mysqlnd, php7.0-pdo-mysql
Description: MySQL module for PHP
 This package provides the MySQL module(s) for PHP. 

php7.0-pdo-mysql是我们对在PHP中加载PDO的mysql驱动程序感兴趣的那个。因此,在尝试安装之前,请务必搜索您的软件包管理器以找到正确的软件包,但是您的发行版/存储库应该有类似的软件包。

安装完成后,您需要重启php-fpm,例如sudo service php7.0-fpm restart,然后检查phpinfo()以确保pdo_mysql驱动程序现已加载。

通过包管理器安装时,您不需要手动编辑php.ini。此外,如果扩展名不存在,将extension=pdo_mysql.so行添加到php.ini中也无效。显然,尝试加载DLL将无法在Linux上运行,这些只是Windows的库。