为什么 mysqli_query return 的结果是一个字段设置为 null 的对象?

Why does the result of mysqli_query return an object with its fields set to null?

我已经在这里和 php 网站上查找了有关以下内容的信息,但我不太明白这个问题。

我会一步步揭开我的疑惑

我想获取其电子邮件为 $email 变量中指定的用户的 ID

$result = execute_db("SELECT id FROM usuarios WHERE email = '$email'");

我调用将连接到我的数据库并执行查询的函数 execute_db

function execute_db($query) {
    $connection = db_connect();

    $result = mysqli_query ($connection, $query);

    error_log("Debug execute_db::" .json_encode($result));
    error_log("Debug execute_db:: query: " .$query);
}

日志文件显示如下:

Debug execute_db::{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type":null}
Debug execute_db:: query: SELECT id, usuario FROM usuarios WHERE email = 'xxx@xxx.com'

如果我输入数据库中的电子邮件,我会得到数据:

$user = mysqli_fetch_assoc($result);  
{"id":"xx"}

为什么 $result 变量 return 是一个字段为空的对象(current_field,num_rows...),如果它“获取”了 1 条记录?

如果我 运行 这不会像我期望的那样:

if (!$result || !$result->num_rows) {
    throw new Exception(gettext("No existe una cuenta asociada a ese correo"));
}

提前致谢

这是一个bug in mysqli。您不能像这样对 mysqli 对象进行字符串化。这些属性不是 NULL,但 json_encode 无法在内部访问它们。