【问题标题】:Laravel 5.4 on PHP 7.0: PDO Exception - Could not find driver (MySQL)PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)
【发布时间】:2017-08-12 01:45:33
【问题描述】:

我的 Ubuntu 14.04(带有 Plesk 12.5.30 的 VPS)上有一个 Laravel 5.4 项目。创建数据库并使用所需信息设置 .env 文件后,我运行php artisan migrate 并引发异常:

[Illuminate\Database\QueryException]
找不到驱动程序(SQL:select * from information_schema.tables where table_schema = pmaramaldb and table_name = migrations)

[PDO异常]
找不到驱动程序

我的 .env 文件有:

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=pmaramaldb

DB_USERNAME=用户

DB_PASSWORD=密码

我已按照大多数指南来解决此错误,但没有任何积极的结果:

启用扩展解决方案:

PDO is enabled

php.ini 文件是自动生成的,我猜这是由 Plesk 制作的。在文件的开头它说:

;注意!
;
;请勿修改此文件,因为它是自动生成的,
;因此,下次生成文件时,您所做的所有更改都将丢失。

所以我还是试过了。之后,我重新启动了 Apache,然后再次尝试...没有用。

安装php7.0-mysql解决方法:

我也尝试安装 MySQL,以防万一:

user@server:/var/www/vhosts$ sudo apt-get install php7.0-mysql

Leyendo lista de paquetes... Hecho

Creando árbol de dependencias

Leyendo la informationación de estado... Hecho

php7.0-mysql已经是最新版本了。

0actualizados, 0 se instalarán, 0 para eliminar y 67 no actualizados.

** SQL Lite 安装解决方案:**

我也尝试过question link 说:sudo apt-get install php5-sqlite,结果是:

user@server:/var/www/vhosts/system/maramal.io/etc$ sudo apt-get install php5-sqlite

Leyendo lista de paquetes... Hecho

Creando árbol de dependencias

Leyendo la informationación de estado... Hecho

php5-sqlite 已经是最新版本了。

0actualizados, 0 se instalarán, 0 para eliminar y 67 no actualizados.

Composer Dump-autoload 解决方案:

它也没有工作。我试过composer dump-autoload,但没用。

运行命令后php -i:

PDO

PDO 支持 => 已启用

PDO 驱动程序 =>

...

PHP 版本 => 5.6.30-1+deb.sury.org~trusty+1

好吧,我不确定这是否与错误有关,但运行 php -v 显示的版本是:

user@server: ~/path$ php -v

PHP 5.6.30-1+deb.sury.org~trusty+1 (cli)

版权所有 (c) 1997-2016 PHP 组

Zend Engine v2.6.0,版权所有 (c) 1998-2016 Zend Technologies
Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2016,Zend Technologies

【问题讨论】:

  • 看起来您已经采取了通常的步骤。是时候仔细检查一些基础知识了:您是否可能将 laravel 设置为使用另一种数据库类型、mssql 或 postgresql?服务器上是否有混合的 php 版本(我认为 ubuntu 14.04 默认使用 php5.x)
  • 可能值得在 CLI 中执行 php -i 以确保它与基于 Web 的匹配。有时,您在 CLI 上获得的 PHP 版本可能与 apache 中的不同。
  • hmm...另一个想法:如果我正确理解该过程,则错误发生在 php cli 调用中。您在链接的问题中看到 leith 的答案了吗? php-cli使用了另一个ini文件,可能是pdo驱动没有激活
  • @Maramal 最好的办法是做which php 找到当前运行的那个,删除它并在您的/usr/bin 或其他路径目录中链接PHP 7 二进制文件。您当前的 CLI php 没有任何 PDO 驱动程序
  • @Maramal 尝试mv /usr/bin/php /usr/bin/php.old 然后ln -s /path/to/php/bin/php /usr/bin/php 不知道您在哪里安装了 PHP,尽管您可能需要查找它(phpinfo 可能会说它在哪里)

标签: php mysql laravel pdo laravel-5


【解决方案1】:

作为替代解决方案,请确保您已安装 php7-mysql

尝试运行下面的命令

sudo apt install php7.0-mysql

或者,如果您想自动安装当前版本

sudo apt install php-mysql

【讨论】:

    【解决方案2】:

    同样的问题,ubuntu 17.10,Laravel 5.5。

    $sudo apt install php7.1-pdo php7.1-mysql

    一个不错的快速修复,希望这会有所帮助

    【讨论】:

      【解决方案3】:

      Apache 使用的 PHP 和链接到命令行的 PHP 之间存在冲突。 (老实说,这种情况发生得更频繁)。

      通常做的是:

      which php
      

      这告诉您在命令行中运行时将执行哪个 php。例如/usr/bin/php

      mv /usr/bin/php /usr/bin/php.old
      

      然后将正确的 PHP 版本链接或复制到可执行路径:

      ln -s /path/to/php/bin/php /usr/bin/php
      

      或者以下也应该有效。

      cp /path/to/php/bin/php /usr/bin/php
      

      如果您希望能够手动安装模组,也建议您:

      ln -s /path/to/php/bin/phpize /usr/bin/phpize
      ln -s /path/to/php/bin/php-config /usr/bin/php-config
      

      这样您的 CLI 将匹配您的网络服务器。

      更新:

      this answer 中所述,如果您使用 Ubuntu 和多个 PHP 替代安装,您可以这样做:

      sudo update-alternatives --set php /usr/bin/php<version>
      sudo update-alternatives --set phar /usr/bin/phar<version>
      sudo update-alternatives --set phar.phar /usr/bin/phar.phar<version> 
      sudo update-alternatives --set phpize /usr/bin/phpize<version> 
      sudo update-alternatives --set php-config /usr/bin/php-config<version>
      

      【讨论】:

      • 我进行了更改,但我得到了同样的错误。我只想迁移我的数据库架构,它适用于我的 Vagrant VM,但不适用于我的 Aruba VPS。我安装了 Debian 8,以及最新的 php、mysql、phpmyadmin、composer、git,然后用 Dploy npm 包无缝部署了我的 laravel 项目。然后我因为gitignore在vps上做了一些改动,因为mysql我改了.env。然后起身跑了。一切看起来都很好。但是当我想将一个简单的表迁移到我的数据库中时,它会抛出一个与@Maramal 询问的错误相同的错误。你的解决方案不适合我。
      • which php 刚刚在 Windows 上为我工作。我用nginx 替换了wamp server,我可以清楚地看到它仍在使用wamp PHP。
      【解决方案4】:

      我遇到了与您相同的情况。我确实解决了以下问题:

      1) 在终端上输入

      php --ini

      这将输出您当前的 php.ini 配置文件路径。

      2) 使用 vim 或您喜欢的编辑器编辑 php.ini。

      vim /etc/php.ini

      请注意,/etc/php.ini 是 php.ini 的路径文件。在您的机器上可能会有所不同。

      3) 找到 ;extension=php_pdo_mysql.dll 并通过删除分号 (;) 来取消注释

      4) 保存您的 php.ini 更改/s

      **5) 重启网络服务器以应用更改

      sudo systemctl 重启 apache2

      **6) 现在运行你的命令。

      php 工匠迁移

      希望这对您有所帮助。

      【讨论】:

        【解决方案5】:

        在linux中这样做

        首先像这样检查你的 php 版本:

        php -v
        

        在你得到版本号之后,例如我得到 7.1 然后像那样安装

        sudo apt-get install  php7.1-sqlite     //for laravel testing with sqlite
        sudo apt-get install  php-mysql         //for default mysql
        sudo apt-get install  php7.1-mysql      //for version based mysql 
        sudo apt-get install  php7.1-common     //for other necessary package for php
        

        并且需要重启apache2

        sudo service apache2 restart
        

        【讨论】:

        • 谢谢,您节省了我的时间。我将版本替换为 7.4 并且可以正常工作!
        • 谢谢Jignesh。只需要添加php-mysql扩展即可。
        • @Digvijay 你是对的 php-mysql 自动安装当前版本
        【解决方案6】:

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

        先安装驱动

        对于 ubuntu:对于 mysql 数据库。

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

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

        您也可以搜索驱动:

        sudo apt-cache search drivername
        

        【讨论】:

          【解决方案7】:

          你可以试试下面这些命令

          php artisan cache:clear
          php artisan config:clear  
          

          然后重新启动您的 apache 服务器。然后 重新配置你的.env 文件

          【讨论】:

            【解决方案8】:

            好的,我曾经遇到过这个错误......我不知道为什么,但看起来在 php 7.3 中存在与驱动程序相关的问题,或者我所做的事情是切换回 php 7.2 并且一切正常...... .

            【讨论】:

            • 回滚到 php7.2 对我有用,也在我的终端上运行以下命令:sudo a2dismod php7.3; sudo a2enmod php7.2; sudo update-alternatives --set php /usr/bin/php7.1; sudo service apache2 restart
            【解决方案9】:
            sudo apt install php7.2-pdo php7.2-mysql
            

            【讨论】:

              【解决方案10】:

              清除工匠缓存

              php artisan cache:clear
              

              php artisan migrate:refresh
              

              就是这样

              【讨论】:

                【解决方案11】:

                实际上,我很确定您不知道您的 PHP - 版本并使用了错误的路径:

                对于您的供应商 PHP 版本(sury.org 的 5.6),您将使用 PHP - 命令作为“/usr/bin/php”,但是当您使用不同的 PHP - 版本时,例如来自 Plesk 的版本,那么你有不同的路径:

                /opt/plesk/php/5.2/bin/php -v
                /opt/plesk/php/5.3/bin/php -v
                /opt/plesk/php/5.4/bin/php -v
                /opt/plesk/php/5.5/bin/php -v
                /opt/plesk/php/5.6/bin/php -v
                /opt/plesk/php/7.0/bin/php -v
                /opt/plesk/php/7.1/bin/php -v
                

                您的 PHP - 可能的其他 PHP 版本的命令(如果您从 https://launchpad.net/~ondrej/+archive/ubuntu/php 安装了 sury.org MAIN ppa PHP 版本,则为 7.0 和 7.1)将是:

                /usr/bin/php7.0 -v
                /usr/bin/php7.1 -v
                

                使用“-m”选项字符串显示每个 PHP 版本的已安装模块,并使用“-i”选项字符串获取信息(示例):

                /opt/plesk/php/7.0/bin/php -m
                /opt/plesk/php/7.0/bin/php -i
                or
                /usr/bin/php7.0 -m
                /usr/bin/php7.0 -i
                

                要使用“composer”,您当然也可以使用 PHP 可执行文件的完整路径(示例):

                /opt/plesk/php/7.0/bin/php composer-setup.php
                or
                /usr/bin/php7.0 composer-setup.php
                

                额外的“作曲家” - 然后是命令:

                /opt/plesk/php/7.0/bin/php composer.phar AND-ADDITIONAL-STRINGS/OPTIONS-TO-BE-INCLUDED
                or
                /opt/plesk/php/7.0/bin/php composer.phar AND-ADDITIONAL-STRINGS/OPTIONS-TO-BE-INCLUDED
                

                【讨论】:

                  猜你喜欢
                  • 2019-09-07
                  • 2012-07-10
                  • 2015-09-11
                  • 2013-11-19
                  • 2013-03-09
                  • 2012-12-09
                  • 2016-05-16
                  相关资源
                  最近更新 更多