MySQLi找不到dockerized php

时间:2017-10-22 21:09:22

标签: php docker mysqli mysqlnd

我正在尝试将我的网站停靠。我已经启动并运行了Nginx和PHP,除了我无法连接到数据库之外它正在查找。当页面加载时,我收到错误:

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

第8行的连接线是:

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

现在这个曾经在我的旧设置上工作正常但是由于转移到新的并安装php7.1.5我无法运行它。现在,我还没有使用过mysql,所以这可能是我的误解,但是mysqlnd包含了mysqli驱动程序。

phpinfo的输出: config mysqlnd

我该如何运行?或者我现在应该使用不同的驱动程序吗?

5 个答案:

答案 0 :(得分:10)

您需要在Dockerfile中启用php扩展:

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

无需触碰php.ini

答案 1 :(得分:2)

为我工作:

内部php容器:

with open(refname) as file:
    for line in file:
        line = line.split('#', 1)[0]+"\n"
        line = re.sub(r'\n+', '\n',line)
        if line.strip():
            list.append(line)
  • docker镜像:mysql,php:7.2.30-apache

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

答案 2 :(得分:1)

我也有类似的问题
php:7-apache 映像,默认情况下不会安装mysqli
您可以在容器内进行验证

$ docker exec -it <phpcontainerid> bash  

在docker容器bash终端内部

# docker-php-ext-enable mysqli

如果未安装mysqli,您将从上述命令的输出中了解

# docker-php-ext-install mysqli

然后我提交了此更改,以使图像相同

$ docker commit -p <phpcontainerid> <new or same image name>

答案 3 :(得分:0)

看起来你的php.ini中没有启用MysqlI扩展。 如果启用,您应该在phpinfo中看到mysqli部分。

有关启用扩展程序的更多信息,请访问:Fatal error: Class 'MySQLi' not found

答案 4 :(得分:0)

确认您的 MySQL 版本应该与 docker 的 PHP 版本兼容

细节:-

首先,确保在phpinfo页面中你应该有mysqli安装信息,否则...... enter image description here

否则,安装它,如果您认为已将其安装在 docker 中但不起作用

然后确认您的 MySQL 版本应该与 docker 的 PHP 版本兼容 喜欢

首先我将这对用于 docker

  • php:7.4-apache & mysql:5.7(但它不工作并显示错误 找不到类 'mysqli')

之后我安装了

  • php:7.2-apache & mysql:5.7 并且它对我来说很好