37

I'm trying to dockerize my website. I've got Nginx and PHP up and running and it's working find except I can't connect to a db. When the page is loaded I get the error:

Fatal error: Uncaught Error: Class 'MySQLi' not found in /private/conn.php:8 Stack trace: #0 /public_html/index.php(2): require() #1 {main} thrown in /private/conn.php on line 8

My connection line on line 8 is:

$db = new mysqli("$host", "$user", "$pass", "$db", "$port");

Now this used to work fine on my old set up but since moving to a new one and installing php7.1.5 I can't get it running. Now, I haven't used the mysqlnd so this may be a misunderstanding on my part but the mysqlnd includes the mysqli driver.

Output of phpinfo: config mysqlnd

How can I get this running? Or should I be using a different driver now?

Tom
  • 9,725
  • 3
  • 31
  • 48

6 Answers6

76

You need to enable the php extension in your Dockerfile:

FROM php:7
RUN docker-php-ext-install mysqli

There is no need to touch php.ini.

Robert
  • 33,429
  • 8
  • 90
  • 94
14

i had similar issue with
php:7-apache image, which by default will not have mysqli installed
you can verify this inside the container

$ docker exec -it <phpcontainerid> bash  

inside the docker container bash terminal

# docker-php-ext-enable mysqli

if mysqli is not installed which you will come to know from the output of above command

# docker-php-ext-install mysqli

then i commited this change so the same image

$ docker commit -p <phpcontainerid> <new or same image name>
Abhishek D K
  • 2,257
  • 20
  • 28
  • You helped me a lot, Abhishek. I didn't know that I can run docker-php-ext-install from container, then I lost much time running apt commandos trying to install in a traditional way. Thanks. – mold Dec 09 '20 at 22:55
  • This is how i got it running with `php:7.4-apache` on Ubuntu. Interestingly, the `docker-php-ext-install mysqli` command in my Dockerfile "worked" in the output, but without solving the issue when running PHP. Can't understand it. – Loïc Pennamen Dec 14 '22 at 09:16
9

works for me:

inside php container:

docker-php-ext-install mysqli

apachectl restart
  • docker images: mysql, php:7.2.30-apache

https://github.com/docker-library/php/issues/391

reyqueson
  • 459
  • 1
  • 7
  • 9
2

I had same problem, fixed it by adding below line to dockercompose

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

And rebuild docker

docker-compose up --build

Rayiez
  • 1,420
  • 19
  • 20
0

It looks like you don't have the MysqlI extension enabled in your php.ini. If enabled, you should see a section mysqli in your phpinfo.

More info on enabling the extension can be found here: Fatal error: Class 'MySQLi' not found

Jordi Kroon
  • 2,607
  • 3
  • 31
  • 55
  • I added `extension=php_mysqli.dll` to my `php.ini` file but no change. Does it need to be installed? and if so - what is MySQLnd? – Tom Oct 22 '17 at 22:56
  • I think it's installed by default, but you have to restart apache first. http://php.net/manual/en/mysqli.installation.php – Jordi Kroon Oct 22 '17 at 22:58
0

Confirm that your MySQL version should compatible with PHP version for docker

Detail:-

First, ensure that in phpinfo page you should have mysqli installed information if not then..... enter image description here

otherwise, install it and if you think you installed it in docker but not working

then Confirm that your MySQL version should compatible with PHP version for docker like

first I was using this pair for docker

  • php:7.4-apache & mysql:5.7 (but it was not working and showing error Class 'mysqli' not found)

after that I installed

  • php:7.2-apache & mysql:5.7 and it works fine for me
Hassan Saeed
  • 6,326
  • 1
  • 39
  • 37