PDOException"找不到驱动程序"

Mik*_*ore 274 php mysql lamp pdo

我刚刚用Apache,MySQL和PHP安装了Debian Lenny,我收到了一个PDOException could not find driver.

这是它所指的特定代码行:

$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

DB_HOST,DB_NAME,DB_USER,和DB_PASS是我所定义的常量.它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好.

这与我的PHP安装有关吗?

搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案.

ZZ *_*der 221

您需要一个名为pdo_mysql的模块.在phpinfo()中寻找以下内容,

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
Run Code Online (Sandbox Code Playgroud)

  • 对于Ubuntu 16.04和PHP7,使用`sudo apt-get install php-mysql` (42认同)
  • 我可以推荐Ubuntu"php5-mysql"包来安装MySQL的PDO支持 (17认同)
  • @letseatfood ......你是怎么想出来的?我遇到了同样的问题! (14认同)
  • 请注意,对于那些使用Apache或其他Web服务器的人,需要重新启动Apache才能使更改生效:`sudo systemctl restart httpd.service` (3认同)
  • 在 CLI 中,您可以通过以下方式验证您的安装:`php -i | grep pdo_mysql` (3认同)
  • @ZZ Coder这在phpinfo()中不存在。你知道我该怎么安装`pdo_mysql`吗? (2认同)

ghb*_*att 189

代码中的dsn显示您正在尝试连接mysql驱动程序.您的错误消息表明此驱动程序不可用.

检查您的服务器上是否安装了mysql扩展.

在Ubuntu/Debian中,您可以检查包裹:

dpkg --get-selections | grep php | grep mysql
Run Code Online (Sandbox Code Playgroud)

如果你没有安装php5-mysql软件包.

在Ubuntu/Debian中你可以使用:

  • PHP5: sudo apt-get install php5-mysql
  • PHP7: sudo apt-get install php7.0-mysql

最后,要使其正常工作,您需要重新启动Web服务器:

  • 阿帕奇: sudo /etc/init.d/apache2 restart
  • Nginx的: sudo /etc/init.d/nginx restart

  • 工作完美的sudo apt-get安装php5-mysql (4认同)
  • 啊......重启是我的一点点! (3认同)

Sud*_*jee 78

更新:较新的版本应该使用php-sqlite3包而不是php5-sqlite.因此,如果您使用的是最近的ubuntu版本,请使用此方法:

sudo apt-get install sqlite php-sqlite3
Run Code Online (Sandbox Code Playgroud)

问题的原始答案在这里:

sudo apt-get install sqlite php5-sqlite
sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

如果你的phpinfo()没有显示pdo_sqlite行(在我的情况下,在我的Ubuntu服务器上),你只需要运行上面的行,然后就可以了.

  • 当OP使用MySQL时,为什么给出sqlite的说明? (54认同)
  • @Andrew如果使用`pdo_sqlite`并且没有安装`php5-sqlite`你只得到一个`PDOException`,没有关于缺少sqlite的信息,并尝试两次安装`php5-mysql`. (6认同)
  • 请注意,php5-sqlite已经过时,可能不再适用于您的系统,即Ubuntu 16.04.改为安装php-sqlite3. (2认同)
  • @briankip当然是,如果你正在尝试连接到SQLite并且缺少该驱动程序.但OP正在尝试连接MySQL.安装sqlite会/不能解决他的问题. (2认同)
  • @安德鲁恩斯利。这个页面的标题是每个人都会遇到的错误,无论他们的数据库平台如何。因此,如果您只搜索错误,则此页面的 google 搜索排名最高。因此,IMO,在这里应该欢迎对与其他数据库相关的这个问题的任何回答。如果他们不为 OP 工作,那就这样吧……OP 不必接受这些答案。这并不意味着这个答案对于其他人调查标题中的错误消息没有“有用”,该错误消息赋予这个问题以 Zoltar 的搜索排名。+1 (2认同)

Tho*_*ink 30

对于具有PHP 7.0的较新版本的Ubuntu,您可以获得该php-mysql包:

sudo apt-get install php-mysql
Run Code Online (Sandbox Code Playgroud)

然后重启服务器:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)


小智 21

在我的Windows机器上,我必须在php.ini中给出扩展目录的绝对路径:

extension_dir = "c:\php5\ext"

  • 我刚刚确认这是真的(Win2008).奇怪 - 其他扩展仅使用推荐的`extension_dir ="ext"`,但不是这个. (2认同)

小智 21

我遇到过同样的问题.解决方案取决于操作系统.就我而言,我有debian,所以要解决它:

这解决了我的问题


Dmi*_*lev 14

在Ubuntu上执行

sudo apt-get install php5-mysql
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,我缺乏Postgresql,所以它最终成为:`sudo apt-get install php5-pgsql` (2认同)

Pra*_*tik 14

检查模块是否可用php -m | grep pdo_mysql

如果没有,对于 PHP 7.2,您可以使用sudo apt install php7.2-mysql.

在其他 PHP 版本和包管理器上使用类似的命令。


小智 9

sudo apt-get install php-mysql 
Run Code Online (Sandbox Code Playgroud)

在ubuntu和php 7上运行良好


cem*_*cem 5

如果MySQL和驱动程序安装正确,你检查了你的php.ini(用phpinfo()检查正确的位置)吗?

  • 我正在寻找php.ini,但是我应该寻找什么?我看到以“ [MySQL]”开头的部分 (2认同)

Sim*_*onW 5

对于PHP 5.5有关CentOS我通过安装固定的这个php55-mysqlnd包。

sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi
Run Code Online (Sandbox Code Playgroud)

如需帮助安装,请写一条评论,因为这取决于 PHP 在您的系统上的安装方式。可用的 repo 是webtaticremi


小智 5

将这些添加到php.ini中时确保在db驱动程序dll之前首先引用php_pdo.dll,否则这也会导致此错误消息.像这样添加它们:

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
Run Code Online (Sandbox Code Playgroud)

  • 从PHP v5.3开始,不再需要php_pdo.dll模块(不存在)。http://php.net/manual/zh/pdo.installation.php可能是这个问题的最终答案。 (2认同)

Ego*_*kov 5

对于 :\\php.ini 文件中的 Windows 8.1/10,您应该取消注释行“extension=pdo_mysql”