为什么 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
无法在内部访问它们。
我已经在这里和 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
无法在内部访问它们。