Laravel:PDOException:找不到驱动程序

时间:2017-03-02 14:11:08

标签: php mysql apache laravel sqlite

我正在服务器上开发一个网站我只能访问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)

30 个答案:

答案 0 :(得分:31)

如果可以,请运行:

composer update

composer require doctrine/dbal

看起来您缺少依赖

编辑:

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

;extension=pdo_mysql.so

取自这篇文章: Laravel 5 PDOException Could Not Find Driver 。我认为在数字海洋上设置laravel时我必须做一些完全相同的事情。

答案 1 :(得分:28)

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

首先安装驱动程序

对于ubuntu:对于mysql数据库。

ComboBox

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

您也可以搜索驱动程序:

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

然后运行cmd sudo apt-cache search drivername

答案 2 :(得分:11)

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

sudo apt-get install php-sqlite3

并且有效。

答案 3 :(得分:6)

首先检查app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions { Authority = "https://localhost:44333", ValidationMode = ValidationMode.ValidationEndpoint, RequiredScopes = new[] { "read", "write" } // scopes });
。如果你没有看到mysql驱动安装mysql php -m
您的结果将类似于:

sudo apt-cache search php-mysql


安装php- mysql驱动程序

php-mysql - MySQL module for PHP [default]

答案 4 :(得分:6)

错误: 找不到驱动程序(SQL:从__init__中选择*,其中tests =限制1)

我在laravel项目中遇到上述错误,我在Ubuntu 16.04上使用了Nginx服务器

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

php-mysql

请在上面的命令中指定您当前的sudo apt-get install php7.2-mysql

打开php version文件,并取消注释下面的代码行(删除分号)。

php.ini

然后重新启动nginx和php服务

;extension=pdo_mysql

对我有用。

答案 5 :(得分:5)

在Ubuntu(18.04)中更简单

apt install php-mysql

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

编码愉快!

答案 6 :(得分:4)

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

apt-get install php7.2-mysql

systemctl restart apache2

答案 7 :(得分:2)

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

之前:

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

之后:

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

建议您还激活fileinfo扩展名,许多软件包都需要这样做。

答案 8 :(得分:1)

最后我解决了这个问题。服务器配置中有一个拼写错误,除了导致错误的php-cli路径外,所有到php可扩展程序的路径都很好。当我修复路径时,一切正常。

答案 9 :(得分:1)

用于 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

答案 10 :(得分:1)

在Linux中,下载Mysql和Php

sudo apt install php-mysql

然后问题将会解决。

答案 11 :(得分:1)

如果您在sqlite run中运行测试

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

如果在窗口中运行测试,则无需安装任何程序。仅配置您的phpunit.xml

答案 12 :(得分:1)

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

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

答案 13 :(得分:1)

解决方案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:

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

答案 14 :(得分:1)

在CentOS7中,我尝试这样做:yum install php-mysql,然后编辑php.ini

答案 15 :(得分:1)

在我的情况下,我正在使用Ubuntu,所以我发现系统安装后没有安装php-sqlite3,

sudo apt-get install php7.2-sqlite3

答案 16 :(得分:0)

在Ubuntu或Windows中

  • 路径php.ini

  • php -i enter image description here

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

    重新启动 xampp wampp

  • 安装sudo apt-get安装php-mysql

php artisan迁移

答案 17 :(得分:0)

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

使用 docker 时必须执行:

docker-compose exec [NAME_OF_DOCKER_SERVICE] php artisan migrate

而不仅仅是php artisan migrate

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

答案 18 :(得分:0)

这个错误发生在我使用 sail 进行开发时。在这种情况下,解决方案是在容器内运行命令

docker exec -it <app-container-id> php artisan migrate

app容器id大概是这样的:

<app-name>_laravel.test_1

答案 19 :(得分:0)

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

答案 20 :(得分:0)

就我而言,我的 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

答案 21 :(得分:0)

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

答案 22 :(得分:0)

在窗口OS中。我有php.ini文件的取消注释extension = pdo_mysql,它位于php.exe的同一目录下。之后它运作良好。

答案 23 :(得分:0)

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

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

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

答案 24 :(得分:0)

对我来说,这些步骤适用于使用 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

答案 25 :(得分:0)

对我来说,php.ini还可以,但是我需要重新启动 php artisan serve

答案 26 :(得分:0)

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

答案 27 :(得分:0)

一些有关升级php版本的人的其他信息。

这是使用 MySql MariaDB laravel框架

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

  1. 确保为7.4版(或已安装的php版)完全安装php扩展和软件包。
  2. 确保启用这些扩展。 pdo_mysql,xmlrpc,mbstring,mysqli,openssl,fileinfo,gd2,curl在php.ini中。
  3. 然后清除缓存,配置
  4. 重新启动所有服务,例如apache,supervisor

答案 28 :(得分:0)

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

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

对于sqlite,请执行-> sudo apt-get install php-sqlite3 然后php artisan migrate

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

答案 29 :(得分:0)

如果您已安装新版本的php 7.2+,则必须在php.ini中取消注释此行 ; extension = pdo_mysql