Php Extension MySqli 已安装但调用它时出现错误

Php Extension MySqli 已安装但调用它时出现错误

我运行以下语句(因此它是完全可重现的)(因为我想使用 WordPress 的源代码)并且以下内容使您的当前目录成为在 8082(pwd)下运行的网站。

mkdir wordpress
cd wordpress
git clone https://github.com/WordPress/WordPress.git .
docker run -p 127.0.0.1:3306:3306 –name some-mariadb -e MARIADB_ROOT_PASSWORD=PASSWORD -d mariadb:latest
docker run -d -p 8082:80 –mount type=bind,source=”$(pwd)”,target=/var/www/html php:apache
  • 在 /usr/local/etc/php/php.ini 中 extension=mysqli 被取消注释(并且其他的也被取消注释)(所以我编辑了这个文件)
  • 我可以连接到 MariaDb 并创建数据库等

我创建了一个新文件:info.php:

if ( function_exists( 'mysqli_connect' ) ) 
{
   echo "exists";
}
else
{
   echo "does not exist";
}
phpinfo();

问题:浏览器中的输出显示“不存在”。

在此处输入图片描述

(phpinfo()phpinfo 显示库 mysqlnd 8.0.11) 在此处输入图片描述

这意味着 WordPress 会出现同样的错误,因为这是 WordPress 使用的代码。

那么为什么... phpinfo 提供了详细信息但找不到该函数/扩展。

我做错了一些事,这很可能是。

参考:


更新 我注意到上面的 phpinfo 屏幕中没有“--with-mysqli=mysqlnd”。所以我解压了 tar 文件(当然是在 docker 镜像中),然后

  • 运行 phpinfo 提供的相同配置命令,并附加“--with-mysqli=mysqlnd”(但必须在各种 apt-get xxx-dev 库之间安装,包括 apache dev 库、libxml-dev、sqlite3-dev、libssl-dev、zlib1g-dev、libcurl4-openssl-dev、libonig-dev、libreadline-dev、libsodium-dev、libargon2-dev)
  • 运行制作
  • 运行 make install
  • 重新开始

这解决了这个问题。

答案1

在这个 docker 镜像 php 编译中缺少一个包。

  1. 进入图片并解压 php tar
  2. 复制 phpinfo 的配置并附加 '--with-mysqli=mysqlnd'
  3. 安装缺失的软件包(各种)xxx-dev 库,包括 apache dev 库、libxml-dev、sqlite3-dev、libssl-dev、zlib1g-dev、libcurl4-openssl-dev、libonig-dev、libreadline-dev、libsodium-dev、libargon2-dev(使用 apt-get install xxx)
  4. 运行 make
  5. 运行安装
  6. 重新开始

这个问题将会得到解决。

或者...在 docker hub 上搜索具有此内容的图像。

相关内容