PHP 致命错误:未捕获的错误:在 /var/www/html/ 中找不到类“mysqli”

Pus*_*mar 1 debian php mysql

我正在 linux 机器上使用 php(7.3) 和 mysql。但是我Fatal error: Uncaught Error: Class 'mysqli' not found in /var/www/html/在 apache2 日志文件 ( /var/log/error.log) 中收到 PHP错误。我检查了几个答案Fatal error: Class 'MySQLi' not found。但没有奏效。

表单处理程序.php

<?php 
$conn = new mysqli("localhost", "root", "root", "Users");
// Check connection
if ($conn->connect_errno) {
   die("Connection failed: " . $conn->connect_error);
}
else
    echo "Connected successfully";
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$query = "SELECT * FROM Users WHERE username = " . $username . " AND password =" . $password; 
$re = mysqli_query($query); 
if (mysqli_num_rows($re) == 0) 
    { echo 'Not Logged In'; } 
else 
    { echo 'Logged In'; }
?>
Run Code Online (Sandbox Code Playgroud)

编辑 1

已经完成执行以下命令

apt install php-mysql
apt-get install php-mysqlnd

编辑 2

我使用以下代码创建了新的 php 文件

<?php
phpinfo(INFO_MODULES);
?>
Run Code Online (Sandbox Code Playgroud)

并且在其他模块中它不显示 mysqli但当我执行apt install php-mysql它时显示 php-mysql 已经是最新版本(2:7.3+69)..

Phi*_*ing 5

您还没有告诉我们您使用的是哪个操作系统。但是既然你已经提到了,apt-get那么我假设你使用的是类似于 Ubuntu 或 Debian 的东西。它们具有相对相似的配置设置。

检查 1

该软件包php-mysql应依赖于php7.2-mysql或类似,因此首先检查是否已安装,例如:

dpkg --list | grep 'php.*mysql'
ii  php-mysql                        2:7.2+69ubuntu1                   all          MySQL module for PHP [default]
ii  php7.2-mysql                     7.2.19-0ubuntu0.19.04.1           amd64        MySQL module for PHP
Run Code Online (Sandbox Code Playgroud)

请记下您安装的版本,如果不是像我的设置那样的 7.2,您将需要更改以后的检查以匹配您的版本。

检查 2

我刚刚查看了我的 Ubuntu 19.04 设置,mysqli 目前安装了自己的共享库,属于该php7.2-mysql包并安装到/usr/lib/php/20170718/mysqli.so.

find /usr/lib/php -name mysqli.so
Run Code Online (Sandbox Code Playgroud)

检查 3

PHP 要使用该模块,需要指示它加载它。根据您设置 PHP 运行的方式,您可能需要查看不同的位置。但是对我来说,在 phpfpm 下运行 PHP 7.2,加载 mysqli 的指令位于:/etc/php/7.2/fpm/conf.d/20-mysqli.ini.

检查您是否加载了模块:

grep mysqli.so /etc/php/7.2/*/conf.d/*
/etc/php/7.2/cli/conf.d/20-mysqli.ini:extension=mysqli.so
/etc/php/7.2/fpm/conf.d/20-mysqli.ini:extension=mysqli.so
Run Code Online (Sandbox Code Playgroud)

确保您使用 PHP` 的任何方式都配置为加载模块。如果未配置为这样做,那么您应该能够添加回配置:

cd /etc/php/7.2/fpm/conf.d
ln -s ../../mods-available/mysqli.ini 20-mysqli.ini
Run Code Online (Sandbox Code Playgroud)

鉴于您所展示的证据,检查 3 最有可能成为原因,但它也最容易出错。