Laravel 5.4 on PHP 7.0: PDO Exception - Could not find driver (MySQL)

99,831

Solution 1

There's a conflict between the PHP that is used by Apache and the PHP that is linked to the command line. (It happens more often that it should to be honest).

What is typically done is:

which php

This tells you which php will be expecuted when running in the command line. e.g. /usr/bin/php

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

Then link or copy the correct PHP version to an executable path:

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

or the following should also work.

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

Also suggested if you want to be able to manually install mods:

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

This way your CLI will match your webserver.

Update:

If as noted in this answer if you are using Ubuntu with multiple alternative installations of PHP you can do:

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>

Solution 2

As an alternative solution be sure you have installed php7-mysql

try to run command below

sudo apt install php7.0-mysql

or, if you want to automatically install the current version

sudo apt install php-mysql

Solution 3

Same problem, ubuntu 17.10, Laravel 5.5.

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

enter image description here

enter image description here

A nice quick fix, hope this helps

Solution 4

I had the same scenario you have. I did resolve mine the following:

1) on your terminal, type

php --ini

this will output your current php.ini configuration file path.

2) edit php.ini using vim or your preferred editor.

vim /etc/php.ini

note that /etc/php.ini is your path file for your php.ini. it may be different on your machine.

3) find ;extension=php_pdo_mysql.dll and uncomment it by removing semicolon (;)

4) save your php.ini change/s

**5) restart the web server to apply the changes

sudo systemctl restart apache2

**6) Now run your command.

php artisan migrate

hope this helps for you.

Solution 5

in linux do like that

first check your php version like this :

php -v

after you get version number for example i get 7.1 then install like that

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

and need to restart apache2

sudo service apache2 restart
Share:
99,831
Maramal
Author by

Maramal

Updated on February 08, 2022

Comments

  • Maramal
    Maramal about 2 years

    I have a Laravel 5.4 project on my Ubuntu 14.04 (VPS with Plesk 12.5.30). After creating the database and setted up the .env file with required information I ran php artisan migrate and exceptions were thrown:

    [Illuminate\Database\QueryException]
    could not find driver (SQL: select * from information_schema.tables where table_schema = pmaramaldb and table_name = migrations)

    [PDOException]
    could not find driver

    My .env file has:

    DB_CONNECTION=mysql

    DB_HOST=127.0.0.1

    DB_PORT=3306

    DB_DATABASE=pmaramaldb

    DB_USERNAME=user

    DB_PASSWORD=password

    I've followed most of the guides to solve this error and there wasn't any positive results:

    Enabling Extension Solution:

    PDO is enabled

    The php.ini file is being generated automatically, I guess this is made by Plesk. At the start of the file it says:

    ; ATTENTION!
    ;
    ; DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
    ; SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

    So I've tried it anyway. After that I've restarted Apache and then tried again... Didn't work.

    Installing php7.0-mysql Solution:

    I've also tried to install MySQL in case is not:

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

    Leyendo lista de paquetes... Hecho

    Creando árbol de dependencias

    Leyendo la información de estado... Hecho

    php7.0-mysql is already the newest version.

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

    ** SQL Lite Install Solution:**

    I've also tried as question link says: sudo apt-get install php5-sqlite and the result was:

    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 información de estado... Hecho

    php5-sqlite is already the newest version.

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

    Composer Dump-autoload Solution:

    It didn't work either. I've tried composer dump-autoload and it didn't work.

    After ran the command php -i:

    PDO

    PDO support => enabled

    PDO drivers =>

    ...

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

    Well, I am not sure if this has anything to do with the error, but the version shown by running php -v is:

    user@server: ~/path$ php -v

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

    Copyright (c) 1997-2016 The PHP Group

    Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies