【问题标题】:PDOException “could not find driver”PDOException“找不到驱动程序”
【发布时间】:2025-12-29 03:30:12
【问题描述】:

我刚刚使用 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_HOSTDB_NAMEDB_USERDB_PASS 是我定义的常量。它在生产服务器(以及我之前的 Ubuntu 服务器设置)上运行良好。

这与我的 PHP 安装有关吗?

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

【问题讨论】:

  • 查看你的php.ini' file and uncomment extension=php_pdo_mysql.dll. The path to your php.ini`文件可以通过查看你的phpinfo()找到。
  • 仅供未来读者参考,如果您收到此错误并且 GoDaddy 是您的主机,请登录您的管理员帐户。托管详细信息-> 编程语言。将您的 PHP 版本升级到最新或至少 5.4
  • @Joe 我升级了,但仍然出现错误 (GoDaddy)
  • 它可能关心的人:如果你在 docker 上使用 php 7.1+,你可以 docker exec 进入容器并运行 docker-php-ext-install pdo pdo_mysql
  • 你可以,但你不应该。像这样所做的更改只存在于短暂的临时容器中,并且很容易因重新启动、重建和更新而丢失。相反,您应该将该行添加到 Dockerfile 以确保它成为 Docker 映像的永久部分。

标签: php mysql pdo lamp


【解决方案1】:

我在使用 cPanel 的共享主机上遇到了同样的错误。如果安装了mysqlnd,则默认安装pdo_mysql 扩展。

但事实并非如此,我必须启用 nd_pdo_mysql 扩展才能使用 PDO。我使用 PHP Selector GUI 来更改它,但那是因为我懒得设置 SSH 连接。

哦,忘了补充说服务器是带有 MariaDB 的 Apache(经常忘记虽然 MariaDB 与 MySql 有相同的父级,但在底层某些功能可能会略有不同)。

PHP 8.0 Laravel 8.0

【讨论】:

    【解决方案2】:

    我的解决方案是安装 php,没有正确配置环境变量和 php.ini 文件。做这两个更正 extension = pdo_mysql.so 的未注释行工作

    【讨论】:

      【解决方案3】:
      PHP Fatal error:  Uncaught PDOException: could not find driver
      

      我一直在为“apt install php-mysql php7toInfinity and don't forget sqlite-what-ever's”苦苦挣扎,直到我回到基础并重置文件权限之前无法摆脱这个错误消息有问题的网站。

      这 3 个命令重置网站上的文件和文件夹权限并使其再次工作。

      cd /var/www/web-site-name.com/web/
      
      # find (sub) directories and change permissions
      find . -type d -exec chmod 755 {} \;
      
      # find files and change permissions
      find . -type f -exec chmod 664 '{}' \;
      

      【讨论】:

        【解决方案4】:

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

        如果没有,对于 PHP 7.2,您可以使用sudo apt install php7.2-mysql 安装相关包。

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

        【讨论】:

          【解决方案5】:

          遇到了同样的问题,因为我忘了进入我的虚拟机。如果我像这样进入我的本地目录:

          cd /www/homestead/my_project
          php artisan migrate
          

          将出现该错误。但它适用于我的虚拟机

          cd ~/homestead
          vagrant ssh   
          cd /www/homestead/my_project
          php artisan migrate
          

          【讨论】:

            【解决方案6】:

            在您的 phpinfo() 中检查 extension_dir 中的正确路径。

            【讨论】:

              【解决方案7】:

              如果您阅读了以上所有答案,但仍然无法正常工作...

              确保您的 PHP PDO 连接字符串正常。不像我的:

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

              错误消息中没有任何信息,找不到什么驱动程序。

              重新安装所有可能的 PDO 和 MySQL 库后,我发现连接字符串的开头有 "

              【讨论】:

                【解决方案8】:

                调用的 PHP 安装不正确

                我遇到了同样的问题。我希望这会对和我有类似问题的人有所帮助。

                场景

                OS = Windows 10  
                Platform = XAMPP  
                PHP Version = 7 (Multiple Version seem to have been installed in the PC)  
                

                我在public 文件夹中创建了phpinfo.php 文件并运行phpinfo() 来查找我的php.ini 文件的位置。

                PHP.ini 位置 = c:\xampp\php\php.ini

                问题
                调用c:\xampp\htdocs> php -v 返回PHP 7.2.3phpinfo.php 显示PHP 7.2.2

                解决方案
                而不是调用

                php artisan migrate:install   
                

                这给了我这个错误,我用了

                c:\xampp\php\php artisan migrate:install
                

                它成功了。

                【讨论】:

                  【解决方案9】:

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

                  • 从 (php5 to php7) 更新了我的 php 版本
                  • 安装php-mysql和php7.0-mysql

                    apt-get install php-mysql
                    apt-get install php7.0-mysql
                    
                  • 我编辑了我的php.ini,位于/etc/php/7.0/apache2/php.ini

                    uncomment the line : extension=php_pdo_mysql.dll
                    
                  • 然后重启apache:

                    service apache2 restart
                    

                  这解决了我的问题

                  【讨论】:

                  • 顺便说一句,对于像我这样发现这还不够并且不想在验证 php7 是否有效之前完成完全删除 php5 的步骤的人:a2dismod php5, @987654327 @ 和 service apache2 restart 终于让我重新振作起来。
                  【解决方案10】:

                  无论我走到哪里,我都读到extension_dir 的路径应该从ext 更改为绝对路径。它对我有用。但是,在尝试为同事的 PC 构建服务器时,我不得不将值设为 ext 而不是放置绝对路径。

                  如果您确实放置了绝对路径,但仍然找不到扩展名,请考虑同时使用绝对路径和ext

                  【讨论】:

                    【解决方案11】:

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

                    【讨论】:

                      【解决方案12】:

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

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

                      在 Ubuntu/Debian 中,您使用以下命令检查软件包:

                      dpkg --get-selections | grep php | grep mysql
                      

                      如果没有,请安装 php5-mysql 包。

                      在 Ubuntu/Debian 中你可以使用:

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

                      最后,为了让它工作,你需要重启你的网络服务器:

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

                      【讨论】:

                      • php-mysql 已经是最新版本(1:7.1+49+deb.sury.org~xenial+4)。当尝试使用 nginx php fpm 在 ubuntu 16.04 中运行命令 sudo apt-get install php-mysql 时,我也会重新启动 php fpm,然后重新启动 nginx。
                      • 目前好像是php-mysql和php7.1-mysql。希望这是向前发展的模式。
                      【解决方案13】:

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

                      sudo apt-get install sqlite php-sqlite3
                      

                      问题的原始答案在这里:

                      sudo apt-get install sqlite php5-sqlite
                      sudo /etc/init.d/apache2 restart
                      

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

                      【讨论】:

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

                      对于 Linux Mint

                      我在使用 PhpBrew ( 5.5.9 / 7.0.14 ) 并尝试创建 PDO 连接时遇到了同样的问题。

                      在我尝试了这篇文章中的大多数解决方案后,我做了以下事情:

                      1. 关闭 PhpBrew

                      2. 执行 sudo apt-get install php7.0 (Linux Mint 17.2 / PHP7.0.16) - 安装新的 php 版本

                      【讨论】:

                        【解决方案15】:

                        对于那些使用 Symfony2/3 并想知道为什么会出现此错误的人。如果您使用“mapping_types”,您可能会遇到此错误。原因是“mapping_types”放置在错误的级别。例如:

                        doctrine:
                          dbal:
                            mapping_types:
                                set: string
                        

                        这个“mapping_types”必须放在这一层:

                        doctrine:
                        dbal:
                            #To counter the error caused by 'mapping_types'
                            connections:
                                default:
                                    server_version: %database_server_version%
                                    mapping_types:
                                        set: string
                        

                        希望对你有帮助

                        我在这里找到了解决方案:https://github.com/doctrine/DoctrineBundle/issues/327

                        【讨论】:

                          【解决方案16】:

                          我花了最后一天试图弄清楚为什么会出现以下错误。我正在运行 Ubuntu 14.04。

                          问题:
                          我注意到我的 PHP-CLI 版本正在运行 php7.0,但 php_info()(网络版本)显示的是 php 5.5.9。即使 php_info() 表示 pdo 已启用,使用命令行 (CLI) 也无法识别 pdo_mysql 命令。事实证明,我的旧版本启用了 mysql,但 CLI 版本没有启用。我所做的只是为php7.0安装mysql并且它能够工作。

                          这是有效的:

                          查看版本:

                          php -v
                          

                          为php7.0安装mysql

                          sudo apt-get install php7.0-mysql
                          

                          1) 确保您的 CLI 版本与您的 Web 版本相同
                          2)如果它们不同,请确保您的 CLI 版本具有 mysql 插件,因为它没有默认附带它。

                          【讨论】:

                            【解决方案17】:

                            在我的例子中,我使用 PDO 和 php-cli,它运行良好。

                            只有当我尝试从 apache 连接时,我才遇到“缺少驱动程序”的问题,我不太明白。

                            一个简单的apt-get install php-mysql 解决了它。 (Ubuntu 16.04 / PHP7。学分转到所选答案和 Ivan 的评论)

                            希望对你有帮助。

                            【讨论】:

                              【解决方案18】:

                              如果您使用 sqlite 进行测试,您将需要 php sqlite pdo 驱动。 您可以按如下方式安装它们。

                              适用于 Ubuntu 14.04

                              sudo apt-get install php5-sqlite
                              sudo service apache2 restart
                              

                              在 ubuntu 16.04 中没有php5-sqlite

                              sudo apt-get install php7.0-sqlite
                              sudo service apache2 restart
                              

                              【讨论】:

                                【解决方案19】:

                                我极力推荐mysqllnd 而不是mysql,因为mysql 扩展会有很多问题,例如数字转换和位类型评估问题。

                                在 ubuntu 上使用以下命令安装 mysqllnd

                                sudo apt-get install php5-mysqlnd
                                

                                【讨论】:

                                  【解决方案20】:

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

                                  sudo apt-get install php-mysql
                                  

                                  然后重启你的服务器:

                                  sudo service apache2 restart
                                  

                                  【讨论】:

                                  • 我认为现在你必须具体使用版本 sudo apt-get install php7.2-mysql
                                  【解决方案21】:

                                  我在使用单独的 php.ini 运行测试时遇到了同样的问题。我不得不将这些行添加到我自己的 php.ini 文件中:

                                  [PHP]
                                  extension = mysqlnd.so
                                  extension = pdo.so
                                  extension = pdo_mysql.so
                                  

                                  注意:完全按照这个顺序

                                  【讨论】:

                                    【解决方案22】:

                                    还有一件事需要确认,因为有些人正在从 Internet 复制/粘贴示例代码以开始使用。确保您在此处输入了 MySQL:

                                    ... $dbh = new PDO ("mysql: ...  
                                    

                                    在一些例子中显示

                                    $dbh = new PDO ("dblib ...
                                    

                                    【讨论】:

                                      【解决方案23】:
                                      sudo apt-get install php-mysql 
                                      

                                      在 ubuntu 和 php 7 上运行良好

                                      【讨论】:

                                      • 它对我有用,虽然我使用的不是php7而是php5.6。但我确实安装了 7 个。我后来安装了 5.6 并在没有卸载 php7 的情况下切换到该版本
                                      【解决方案24】:

                                      我在删除 php5 包(也包括所有驱动程序)以安装 php7 包后遇到了同样的问题。我实际上安装了没有mysql模块的php7包。

                                      我设法通过在终端中输入来解决它:

                                      1) $ apt-cache search php7 其中列出了所有模块,查看我找到的模块,

                                      php7.0-mysql - PHP 的 MySQL 模块

                                      2) $ sudo apt-get install php7.0-mysql

                                      就是这样。它在我的 linux 系统中对我有用。

                                      (使用合适的php版本,你的可以是php5)

                                      【讨论】:

                                        【解决方案25】:

                                        去掉php.ini中;extension=php_pdo_mysql.dll前的分号并保存。 不要忘记重启 xampp Apache 和 Mysql。

                                        【讨论】:

                                          【解决方案26】:

                                          问题是缺少 php 到 mysql 库。在 CentOs 我通过运行修复它 # yum install php-mysql 然后用 # /bin/systemctl restart httpd.service 重启 apache 注意命名与基于 debian/ubuntu 的发行版 php->php5 和 httpd->apache2 略有不同。

                                          【讨论】:

                                            【解决方案27】:

                                            就我而言(Windows XP + Apache2.2 + PHP 5.4.31)我在httpd.conf 中更改了PHPIniDir 来解决这个问题:

                                            来自:

                                            "C:\php5\" 
                                            

                                            到:

                                            "C:/php5/"
                                            

                                            【讨论】:

                                              【解决方案28】:

                                              我通过在“IIS 信息服务 -> PHP Exstention”中启用 php_pdo_mysql.ddl 解决了这个问题。

                                              【讨论】:

                                                【解决方案29】:

                                                遇到了同样的问题,刚刚发现,网站在 MAMP 的 php 下运行,但是当你调用命令时,它运行 mac(如果没有修改 bash 路径)。当 mac 没有这些扩展时,你会遇到问题。

                                                运行 php -i 找出加载的扩展,然后安装那些你错过的。 或运行'/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}'来使用MAMP的

                                                【讨论】:

                                                  【解决方案30】:

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

                                                  [PHP_PDO]
                                                  extension=php_pdo.dll
                                                  [PHP_PDO_MYSQL]
                                                  extension=php_pdo_mysql.dll
                                                  

                                                  【讨论】: