127

I am developing a website on a server I only have access to MySQL and FTP, so all commands I run are through the b374k php shell . I am experiencing a Laravel problem with SQL driver. I tried switching to file-hosted SQLite (in database/database.sqlite), but the thrown exception is the same as when using MySQL. The input & output of the console is as follows:

   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

The Apache extensions installed on the server are:

    /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

What can be the problem and how can I fix it? (I don't have access to root bash)

3
  • Possible duplicate of Laravel 5 PDOException Could Not Find Driver Commented Apr 3, 2017 at 7:42
  • With anything like this the first thing to do is make sure you're using artisan on the right server, i.e. it is the version connected to the database (and not the local copy that isn't). Commented Sep 10, 2018 at 12:39
  • 5
    This happened to me when I upgraded to PHP 7.3. stackoverflow.com/a/38297109/470749 fixed it: apt-get install php7.3-mysql Commented Oct 23, 2019 at 14:15

32 Answers 32

160

You might need to uncomment the following in your php.ini file.

;extension=pdo_mysql.so

Taken from this post: Laravel 5 PDOException Could Not Find Driver . I think I had to do something exactly like this when setting up laravel on digital ocean.

Sign up to request clarification or add additional context in comments.

5 Comments

I had mariadb in archlinux, un-commented ;extension=pdo_mysql which worked
in my case i'm using PostgreSQL. After activating the "pdo_pgsql" extension and restarting the server the problem was gone.
In my case I needed to uncomment ;extension=pdo_mysql.so
Solved my problem by uncommenting this line extension=pdo_mysql from php.ini. Hope this helps someone.
I get "cannot open shared object file: no such file or directory /usr/lib/php/20200930/pdo_mysql.so" after uncommenting ;extension=pdo_mysql.so on a fresh php8.0
87

Your database driver is missing. To solve the probelm

First install the driver

For ubuntu: For mysql database.

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

You also can search for other database systems.

You also can search for the driver:

sudo apt-cache search drivername

Then Run the cmd php artisan migrate

2 Comments

Thanks I used sudo apt-get install php7.2-mysql in accordance to my PHP version.
sudo apt-get install php8.0-mysql after php8 installed
60

Even simpler in Ubuntu (18.04)

apt install php-mysql

Done. No need to edit any .ini files.

3 Comments

This is the fix if you recently upgraded PHP but don't have the current (or correspondent to your PHP version) edition of the php-mysql driver. In my case, I recently updated to PHP 7.2, so had to run: apt install php-mysql
for php7.2 run apt install php7.2-mysql. And you have edit ; in php.ini file too for the line extension=pdo_mysql
Future me, remember to run sudo, as in "sudo apt install php-mysql"
59

I got the same error when running my test suite. It was working before but it stopped working after I upgraded php. So I did

sudo apt-get install php-sqlite3

and it worked.

Comments

16

First check php -m
.If you don't see mysql driver install mysql sudo apt-cache search php-mysql
Your results will be similar to:

php-mysql - MySQL module for PHP [default]


install php- mysql Driver

sudo apt-get install php7.1-mysql

Comments

16

Solution 1:

1. php -v

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

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

Solution 2:

Check your DB credentials like DB Name, DB User, DB Password

1 Comment

Yes, it works. And you cand find Laravel PHP version when your develop server suns via php artisan serve. It will be like: Laravel development server started: <127.0.0.1:8000> [Sun Feb 23 14:52:16 2020] PHP 7.4.3 Development Server (127.0.0.1:8000) started
12

ERROR: could not find driver (SQL: select * from tests where slug = a limit 1)

I was getting the above error in my laravel project, i am using nginx server on ubuntu 16.04

This error is because, php-mysql driver is missing. To install it type following command.

sudo apt-get install php7.2-mysql

Please specify your current php version in above command.

Open php.ini file and uncomment the followling line of code(Remove Semicolon).

;extension=pdo_mysql

Then Restart the nginx and php service

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

It worked for me.

Comments

9

You are probably missing sqlite or the specific DB driver you are trying to migrate.

Install the DB driver and you'd be fine. You don't necessarily need to edit your php.ini file (it's one way to fix it too though).

For sqlite do --> sudo apt-get install php-sqlite3 Then php artisan migrate

NB: I assume you have PHP and MySql already installed

Comments

7

You need to enable these extensions in the php.ini file

Before:

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

After:

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

It is advisable that you also activate the fileinfo extension, many packages require this.

Comments

6

I had a similar issue in Ubuntu 16.04 and what help me was that i installed php-mysql for php 7.2. I would recommend you run the following command if you have php 7.2 or install php mysql depending on your version of PHP. Make sure that you have installed the DBAL packege

apt-get install php7.2-mysql

systemctl restart apache2

Comments

6

Create a .env file.

if using laravel and composer, generate a key for project.

php artisan key:generate

Comments

5

I had the same issue, and I uncomment extension=pdo_sqlite and ran the migration and everything worked fine.

Comments

5

I faced the same problem while using sqlite 3:

  1. Make sure the changes made on .env.example and the same on the .env file.
  2. Then run $ sudo apt-get install php-sqlite3 on terminal.
  3. Finally $ php artisan migrate.

1 Comment

5

In Linux Download Mysql and Php

sudo apt install php-mysql

Then the problem will be solved.

Comments

3

Not really answer to original question but might help to someone:

When using docker you have to execute:

docker-compose exec [NAME_OF_DOCKER_SERVICE] php artisan migrate

Instead of only php artisan migrate

Just wanted to share this as I have made this error few times already

Comments

2

Finally I fixed this. There was a typo in the server configuration and all paths to php extecutables were fine except the path to php-cli, which caused the error. When I fixed the path, everything worked fine.

Comments

2

In CentOS7,I try this: yum install php-mysql, then edit php.ini

Comments

2

if you have installed new version of php 7.2+ then you have to uncomment this line in php.ini ;extension=pdo_mysql

Comments

2

In my case I'm using Ubuntu so I found that my system is not installed php-sqlite3, after installation its got fixed.

sudo apt-get install php7.2-sqlite3

1 Comment

Yep this is the most common solution for most of the cases and it's explained in this article. laracasts.com/discuss/channels/laravel/…
2

In case that you run test in sqlite run

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

If you run test in window, you dont need install nothing. Only config your phpunit.xml

Comments

2

For me, these steps worked in Ubuntu with PHP 7.3:

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

Comments

2

For sqlite on debian/ubuntu

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

Comments

2

for Windows 8.1/10 in :\php.ini file you should uncomment line "extension=pdo_mysql"

Comments

2

For php 8 running on laravel 8 (ubuntu), run sudo apt install php8.0.3-mysql then restart apache sudo service apache2 restart

Comments

1

In window OS. I have uncomment extension=pdo_mysql for php.ini file that locate at same directory of php.exe. after that it work fine.

Comments

1

Some Additional information for people who upgraded their php version.

This is for laravel framework using MySql or MariaDB.

I had issues after upgrading php version from 7.2 to 7.4.

  1. Make sure you completely install php extentions and packages for php version 7.4 (Or your installed php version).
  2. Make sure you enable these extentions. pdo_mysql, xmlrpc, mbstring, mysqli, openssl, fileinfo, gd2, curl at php.ini.
  3. Then clear cache, config
  4. Restart all services such as apache, supervisor

Comments

1

For me, php.ini was OK, but I needed to restart php artisan serve.

Comments

1

in ubuntu or windows

  • path php.ini

  • php -i enter image description here

  • Remove the ; from ;extension=pdo_mysql or extension=php_pdo_mysql.dll and add extension=pdo_mysql.so

    restart xampp or wampp

  • install sudo apt-get install php-mysql

and

php artisan migrate

Comments

1

On Windows, I followed the same path as the previous answers. The difference is that the path to php.ini is usually different from the traditional ones, usually in Apache.

To find php.ini, I used the following path: C:\tools\php80\php.ini

After that, I uncommented the pdo extension files and the migration worked.

Comments

1

In my case I the php path was different from xampp php path that my project hosted on.

So I just change the system path from the pure php path to the php path in xamppp and all working fine.

I run this command in Ubuntu

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

may you have installed the php so like me you need to first run this command and then try above again

sudo rm /usr/bin/php

May your composer has some issue so you need to run this as well

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

Source: https://askubuntu.com/a/563993

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.