Search code examples
phpdockerdocker-composefpm

mysqli not found in (php-fpm) docker container


I'm running php:7-fpm in a docker container that is used by my nginx web server. Everything is working nicely except for when I'm trying to instantiate a mysqli connection in my PHP code. I receive the following error:

"NOTICE: PHP message: PHP Fatal error:  Uncaught Error: Class 'Listener\mysqli' not found in index.php:104

Here's my Dockerfile for building the image, where I explicitly install the mysqli extension:

FROM php:7-fpm

RUN docker-php-ext-install mysqli

It appears to be installed given the phpinfo() output below. Do I need to configure or enable it somehow?

enter image description here


Solution

  • Your problem isn't that you're missing the mysqli extension.

    If you're doing something like this:

    namespace Listener;
    
    class Foo
    {
        public function bar() {
            $conn = new mysqli(...);
        }
    }
    

    Then PHP will interpret new mysqli() as new \Listener\mysqli() because you're currently in the \Listener namespace. To fix this, you can just explicitly anchor mysqli() to the root namespace:

    $conn = new \mysqli(...);