【问题标题】:Laravel: PDOException: could not find driverLaravel:PDOException:找不到驱动程序
【发布时间】:2017-07-22 07:30:42
【问题描述】:

我正在服务器上开发一个网站,我只能访问 MySQL 和 FTP,所以我运行的所有命令都是通过 b374k php shell 。我在使用 SQL 驱动程序时遇到了 Laravel 问题。我尝试切换到文件托管的 SQLite(在 database/database.sqlite 中),但抛出的异常与使用 MySQL 时相同。控制台的输入输出如下:

   php artisan migrate:refresh --seed
    [Illuminate\Database\QueryException]
could not find driver (SQL: select * from sqlite_master where type = 'table ' and name = migrations)
 [Doctrine\DBAL\Driver\PDOException]
could not find driver
 [PDOException]
could not find driver

服务器上安装的 Apache 扩展有:

    /etc/php/5.6/apache2/conf.d/10-mysqlnd.ini, 
/etc/php/5.6/apache2/conf.d/10-opcache.ini,
 /etc/php/5.6/apache2/conf.d/10-pdo.ini,
 /etc/php/5.6/apache2/conf.d/15-xml.ini, 
/etc/php/5.6/apache2/conf.d/20-calendar.ini,
 /etc/php/5.6/apache2/conf.d/20-ctype.ini, 
/etc/php/5.6/apache2/conf.d/20-curl.ini,
 /etc/php/5.6/apache2/conf.d/20-dom.ini, 
/etc/php/5.6/apache2/conf.d/20-exif.ini, 
/etc/php/5.6/apache2/conf.d/20-fileinfo.ini, 
/etc/php/5.6/apache2/conf.d/20-ftp.ini, /etc/php/5.6/apache2/conf.d/20-gd.ini, 
/etc/php/5.6/apache2/conf.d/20-gettext.ini, 
/etc/php/5.6/apache2/conf.d/20-iconv.ini, 
/etc/php/5.6/apache2/conf.d/20-json.ini, 
/etc/php/5.6/apache2/conf.d/20-mbstring.ini, 
/etc/php/5.6/apache2/conf.d/20-mcrypt.ini, 
/etc/php/5.6/apache2/conf.d/20-mysql.ini, 
/etc/php/5.6/apache2/conf.d/20-mysqli.ini, 
/etc/php/5.6/apache2/conf.d/20-pdo_mysql.ini,
 /etc/php/5.6/apache2/conf.d/20-phar.ini, 
/etc/php/5.6/apache2/conf.d/20-posix.ini, 
/etc/php/5.6/apache2/conf.d/20-readline.ini, 
/etc/php/5.6/apache2/conf.d/20-shmop.ini, 
/etc/php/5.6/apache2/conf.d/20-simplexml.ini, 
/etc/php/5.6/apache2/conf.d/20-sockets.ini,
 /etc/php/5.6/apache2/conf.d/20-sysvmsg.ini,
 /etc/php/5.6/apache2/conf.d/20-sysvsem.ini,
 /etc/php/5.6/apache2/conf.d/20-sysvshm.ini,
 /etc/php/5.6/apache2/conf.d/20-tokenizer.ini, 
/etc/php/5.6/apache2/conf.d/20-wddx.ini,
 /etc/php/5.6/apache2/conf.d/20-xmlreader.ini, 
/etc/php/5.6/apache2/conf.d/20-xmlwriter.ini, 
/etc/php/5.6/apache2/conf.d/20-xsl.ini, 
/etc/php/5.6/apache2/conf.d/20-zip.ini

可能是什么问题,我该如何解决? (我无权访问 root bash)

【问题讨论】:

标签: php mysql apache laravel sqlite


【解决方案1】:

如果可以,请运行:

composer update

composer require doctrine/dbal

您似乎缺少依赖项

编辑:

您可能需要在 php.ini 文件中注释掉以下内容。

;extension=pdo_mysql.so

取自这篇文章: Laravel 5 PDOException Could Not Find Driver .我认为在数字海洋上设置 laravel 时我必须做类似的事情。

【讨论】:

  • 我在 archlinux 中有 mariadb,未注释 ;extension=pdo_mysql 有效
  • 就我而言,我使用的是 PostgreSQL。激活“pdo_pgsql”扩展并重新启动服务器后,问题就消失了。
  • 就我而言,我需要取消注释 ;extension=pdo_mysql.so
  • 通过从 php.ini 中取消注释这一行 extension=pdo_mysql 解决了我的问题。希望这对某人有所帮助。
  • 在新的 php8.0 上取消注释 ;extension=pdo_mysql.so 后,我得到“无法打开共享对象文件:没有这样的文件或目录 /usr/lib/php/20200930/pdo_mysql.so”
【解决方案2】:

您的数据库驱动程序丢失。解决问题

先安装驱动

对于 ubuntu:对于 mysql 数据库。

sudo apt-get install php5.6-mysql/php7.2-mysql

您也可以搜索其他数据库系统。

您也可以搜索驱动:

sudo apt-cache search drivername

然后运行 ​​cmd php artisan migrate

【讨论】:

  • 谢谢我根据我的PHP版本使用sudo apt-get install php7.2-mysql
【解决方案3】:

我在运行我的测试套件时遇到了同样的错误。它以前可以工作,但在我升级 php 后它停止工作。所以我做到了

sudo apt-get install php-sqlite3

它成功了。

【讨论】:

  • 谢谢我在使用 sqlite 进行 laravel 测试时遇到了这个问题
  • 是的,在 laravel 6 中运行测试,这是必要的
  • 谢谢,这解决了我的问题...如上所述,正在尝试使用 sqlite 作为数据库运行 laravel 6 测试。
  • 谢谢!这也解决了我的问题!使用 php 7.4 和 Laravel 7
【解决方案4】:

在 Ubuntu (18.04) 中更简单

apt install php-mysql

完成。无需编辑任何.ini 文件。

编码愉快!

【讨论】:

  • 如果您最近升级了 PHP 但没有当前(或与您的 PHP 版本相对应)版本的 php-mysql 驱动程序,这是修复。就我而言,我最近更新到 PHP 7.2,所以必须运行:apt install php-mysql
  • 对于 php7.2 运行 apt install php7.2-mysql。你也可以在 php.ini 文件中编辑; extension=pdo_mysql
  • 这解决了我的问题,我最近在 plesk 上升级了 php 版本,运行此命令后没有更多问题。
  • 未来的我,记得运行sudo,如“sudo apt install php-mysql”
【解决方案5】:

第一次检查php -m
.如果你没有看到mysql驱动安装mysqlsudo apt-cache search php-mysql
您的结果将类似于:

php-mysql - MySQL module for PHP [default]


安装php-mysql驱动

sudo apt-get install php7.1-mysql

【讨论】:

    【解决方案6】:

    解决方案 1:

    1. php -v
    

    输出: PHP 7.3.11-1+ubuntu16.04.1+deb.sury.org+1 (cli)

    2. sudo apt-get install php7.3-mysql
    

    解决方案 2:

    检查您的数据库凭据,例如 数据库名称数据库用户数据库密码

    【讨论】:

    • 是的,它有效。当你的开发服务器通过php artisan serve 运行时,你可以找到 Laravel PHP 版本。就像: Laravel 开发服务器已启动:127.0.0.1:8000> [Sun Feb 23 14:52:16 2020] PHP 7.4.3 开发服务器 (127.0.0.1:8000) 已启动
    • 赞成原因检查 php -v 是了解要安装 php-mysql 版本的第一步
    【解决方案7】:

    错误: 找不到驱动程序(SQL:select * from tests where slug = a limit 1)

    我在我的 laravel 项目中遇到上述错误,我在 ubuntu 16.04 上使用 nginx 服务器

    此错误是因为缺少php-mysql 驱动程序。要安装它,请键入以下命令。

    sudo apt-get install php7.2-mysql
    

    请在上述命令中指定您当前的php version

    打开php.ini文件并取消注释以下代码行(删除分号)。

    ;extension=pdo_mysql
    

    然后重启nginx和php服务

    sudo systemctl restart php7.2-fpm
    sudo systemctl restart nginx
    

    它对我有用。

    【讨论】:

    • 我发现通过 HTTP 的 Laravel 工作正常很有趣——甚至工匠迁移也能正常工作。但是,在创建新的控制台命令时,我遇到了这个错误。安装更新的 mysql 驱动程序解决了这个问题。
    【解决方案8】:

    您可能缺少 sqlite 或您尝试迁移的特定数据库驱动程序。

    安装数据库驱动程序就可以了。您不一定需要编辑 php.ini 文件(不过这也是修复它的一种方法)。

    对于 sqlite 做 --> sudo apt-get install php-sqlite3 然后php artisan migrate

    注意:我假设你已经安装了 PHP 和 MySql

    【讨论】:

      【解决方案9】:

      我在 Ubuntu 16.04 中遇到了类似的问题,对我有帮助的是我为 php 7.2 安装了 php-mysql。如果您有 php 7.2,我建议您运行以下命令,或者根据您的 PHP 版本安装 php mysql。确保您已安装 DBAL 包

      apt-get install php7.2-mysql
      
      systemctl restart apache2
      

      【讨论】:

      • 在我的情况下没有安装 php-mysql 驱动程序,你的回答真的很有帮助!
      【解决方案10】:

      您需要在 php.ini 文件中启用这些扩展

      之前:

      ;extension=pdo_mysql
      ;extension=mysqli
      ;extension=pdo_sqlite
      ;extension=sqlite3
      

      之后:

      extension=pdo_mysql
      extension=mysqli
      extension=pdo_sqlite
      extension=sqlite3
      

      建议你同时激活 fileinfo 扩展,很多包都需要这个。

      【讨论】:

        【解决方案11】:

        我在使用 sqlite 3 时遇到了同样的问题:

        1. 确保对 .env.example 所做的更改与对 .env 文件的更改相同。
        2. 然后在终端上运行$ sudo apt-get install php-sqlite3。
        3. 终于$ php artisan 迁移。

        【讨论】:

        【解决方案12】:

        我遇到了同样的问题,我取消注释 extension=pdo_sqlite 并运行 migration 并且一切正常。

        【讨论】:

          【解决方案13】:

          最后我解决了这个问题。服务器配置中有一个错字,所有 php 可执行文件的路径都很好,除了导致错误的 php-cli 的路径。当我修好路径后,一切正常。

          【讨论】:

            【解决方案14】:

            在CentOS7,我试试这个:yum install php-mysql,然后编辑php.ini

            【讨论】:

              【解决方案15】:

              如果您安装了新版本的 php 7.2+,那么您必须在 php.ini 中取消注释该行 ;扩展=pdo_mysql

              【讨论】:

                【解决方案16】:

                在我的情况下,我使用的是 Ubuntu,所以我发现我的系统没有安装 php-sqlite3,安装后它得到了修复。

                sudo apt-get install php7.2-sqlite3

                【讨论】:

                【解决方案17】:

                如果你在 sqlite run 中运行测试

                sudo apt install sqlite3 && sudo apt install php-sqlite3
                

                如果你在窗口中运行测试,你不需要安装任何东西。只配置你的phpunit.xml

                【讨论】:

                  【解决方案18】:

                  在 Linux 中下载 Mysql 和 Php

                  sudo apt install php-mysql
                  

                  那么问题就解决了。

                  【讨论】:

                    【解决方案19】:

                    在 ubuntu 或 windows 中

                    • 路径 php.ini

                    • php -i

                    • ;extension=pdo_mysql 中删除 ;extension=php_pdo_mysql.dll 并添加 extension=pdo_mysql.so

                      重启 xamppwampp

                    • 安装 sudo apt-get install php-mysql

                    php 工匠迁移

                    【讨论】:

                      【解决方案20】:

                      debian/ubuntu 上的 sqlite

                      PHP 7.1

                      sudo apt install php7.1-sqlite3
                      

                      PHP 7.2

                      sudo apt install php7.2-sqlite3
                      

                      PHP 7.3

                      sudo apt install php7.3-sqlite3
                      

                      PHP 7.4

                      sudo apt install php7.4-sqlite3
                      

                      【讨论】:

                        【解决方案21】:

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

                        【讨论】:

                          【解决方案22】:

                          没有真正回答原始问题,但可能对某人有所帮助:

                          使用 docker 时必须执行:

                          docker-compose exec [NAME_OF_DOCKER_SERVICE] php artisan migrate
                          

                          而不仅仅是php artisan migrate

                          只是想分享这个,因为我已经犯了几次这个错误

                          【讨论】:

                            【解决方案23】:

                            创建一个 .env 文件。

                            如果使用 laravel 和 composer,为项目生成密钥。

                            php 工匠密钥:生成

                            【讨论】:

                              【解决方案24】:

                              在窗口操作系统中。我对位于 php.exe 同一目录的 php.ini 文件取消注释 extension=pdo_mysql 。之后它就可以正常工作了。

                              【讨论】:

                                【解决方案25】:

                                为升级 php 版本的人提供的一些附加信息。

                                这适用于使用 MySqlMariaDBlaravel 框架

                                将 php 版本从 7.2 升级到 7.4 后遇到问题。

                                1. 确保您完全安装了 php 7.4 版(或您安装的 php 版本)的 php 扩展和包。
                                2. 确保启用这些扩展。 pdo_mysql、xmlrpc、mbstring、mysqli、openssl、fileinfo、gd2、curl at php.ini。
                                3. 然后清除缓存,配置
                                4. 重启apache、supervisor等所有服务

                                【讨论】:

                                  【解决方案26】:

                                  对我来说,php.ini 没问题,但我需要重新启动 php artisan serve

                                  【讨论】:

                                    【解决方案27】:

                                    对我来说,这些步骤在带有 PHP 7.3 的 Ubuntu 中有效:

                                    1. vi /etc/php/7.3/apache2/php.ini > uncomment:
                                      ;extension=pdo_sqlite
                                      ;extension=pdo_mysql
                                    2. sudo apt-get install php7.3-sqlite3
                                    3. sudo service apache2 restart
                                    

                                    【讨论】:

                                      【解决方案28】:

                                      在 Windows 上,我遵循与之前的答案相同的路径。不同的是,php.ini 的路径通常与传统路径不同,通常在 Apache 中。

                                      为了找到 php.ini,我使用了以下路径:C:\tools\php80\php.ini

                                      在那之后,我取消了pdo extension files 的注释并且迁移成功了。

                                      【讨论】:

                                        【解决方案29】:

                                        在我的情况下,我的 php 路径与我的项目托管的 xampp php 路径不同。

                                        所以我只是将系统路径从纯php路径更改为xamppp中的php路径,一切正常。

                                        我在 Ubuntu 中运行这个命令

                                        sudo ln -s /opt/lampp/bin/php /usr/bin/php

                                        可能你已经安装了 php,所以像我一样,你需要先运行这个命令,然后再试一次

                                        sudo rm /usr/bin/php

                                        可能你的作曲家有一些问题,所以你也需要运行它

                                        curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer

                                        来源:https://askubuntu.com/a/563993

                                        【讨论】:

                                          【解决方案30】:

                                          对于在 laravel 8 (ubuntu) 上运行的 php 8,运行 sudo apt install php8.0.3-mysql 然后重启 apache sudo service apache2 restart

                                          【讨论】:

                                            猜你喜欢
                                            • 2019-07-17
                                            • 2016-07-14
                                            • 2016-08-05
                                            • 2016-09-03
                                            • 2022-01-23
                                            • 2012-02-09
                                            相关资源
                                            最近更新 更多