【问题标题】:MySQLi not found dockerized phpMySQLi 未找到 dockerized php
【发布时间】:2018-04-03 09:38:27
【问题描述】:

我正在尝试 dockerize 我的网站。我已经启动并运行了 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 后,我无法让它运行。现在,我没有使用 mysqlnd,所以这可能是我的一个误解,但 mysqlnd 包含 mysqli 驱动程序。

phpinfo 的输出:

我怎样才能让它运行?还是我现在应该使用其他驱动程序?

【问题讨论】:

  • 你能显示 Dockerfile 吗?您需要在那里启用扩展,但这取决于您的基本映像是什么。
  • 我正在使用这里的 php:fpm https://hub.docker.com/_/php/
  • 只是出于好奇……您使用的是 docker for windows 吗?
  • @Zuabi 不,它在 Linux 机器上

标签: php docker mysqli mysqlnd


【解决方案1】:

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

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

无需触摸php.ini

【讨论】:

  • 一些它不起作用的原因。这是在我的Dockerfile FROM php:7.2-apache RUN docker-php-ext-install mysqli 它也没有给出任何错误
  • 这是基本的东西。他从 docker php 官方镜像获取。
  • 把 Id docker 文件放在哪里?!?
【解决方案2】:

我对
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>

【讨论】:

  • 你帮了我很多,阿布舍克。我不知道我可以从容器运行 docker-php-ext-install,然后我在运行 apt commandos 尝试以传统方式安装时浪费了很多时间。谢谢。
【解决方案3】:

为我工作:

在 php 容器内:

docker-php-ext-install mysqli

apachectl restart
  • docker 镜像:mysql, php:7.2.30-apache

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

【讨论】:

  • 官方的php-apache docker不包含mysqli,如果你真的需要mysqli,因为你不会修改你的代码,这就是解决方案
  • 这就是解决方案!!非常感谢!
【解决方案4】:

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

更多关于启用扩展的信息可以在这里找到:Fatal error: Class 'MySQLi' not found

【讨论】:

  • 我将extension=php_mysqli.dll 添加到我的php.ini 文件中,但没有任何变化。需要安装吗?如果是这样 - MySQLnd 是什么?
  • 我觉得是默认安装的,但是你得先重启apache。 php.net/manual/en/mysqli.installation.php
【解决方案5】:

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

详情:-

首先,确保在phpinfo页面中你应该有mysqli的安装信息,如果没有那么.....

否则,请安装它,如果您认为您已将其安装在 docker 中但无法正常工作

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

首先我将这对用于 docker

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

之后我安装了

  • php:7.2-apache & mysql:5.7对我来说很好用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2018-08-13
    • 2014-04-23
    • 2019-04-04
    • 2014-12-16
    • 2020-03-09
    相关资源
    最近更新 更多