php - 未捕获的 PDOException : could not find driver

标签 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

我在网上搜索了一下,发现我必须在 Windows 中的 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而不是so。无论如何,启用该 .dll 文件并重新启动 php 没有任何变化。有人可以帮助我吗?

谢谢

最佳答案

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

该软件包可能会被称为php7.0-pdo-mysql,具体取决于您的 Ubuntu 软件包管理器配置的存储库。如果您在 Ubuntu 16.04 上使用 PHP 7,它很可能是一个包含 php7.0-mysql 的元包。以下是我使用 Ondrej PPA 从 aptitude 16.04 获得的信息。

能力显示 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 专用的库。

关于php - 未捕获的 PDOException : could not find driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089731/

相关文章:

PHP将带分号的textarea插入MYSQL

php - 将两个 mySQL sum 查询合并为一个使用不同 where 子句的查询

php - 将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是什么

php - 使用 php 类和方法连接数据库

php - mySQLI管理

mysql - 进阶 MySQL 左联接 IFNULL 查询

php数据库空数组

php - PDO 获取循环一遍又一遍地返回相同 mysql 表列名的数组而不是数据

php - 直接 MySQL 查询或缓存文件 - 哪个更快?

php - 我可以使用 YouTube API 获得更大的缩略图尺寸吗?