我最近在编写应用程序的一大块时遇到了这种困境。
我收到以下错误:Cannot use object of type mysqli_result as array
但是,我的应用程序在尝试返回或回显它之前将结果转换为数组。
代码在方法定义中。是的,我尽我所能,包括搜索这个网站,包括标记为重复的所有问题。没有发型师。
以下是我尝试解决方案后的代码:
public function lookupEmailByUsername($username)
{
$database = new mysqli(APP_DB_HOSTNAME, APP_DB_USERNAME, APP_DB_PASSWORD, APP_DB_DATABASE, APP_DB_PORT);
$database->select_db("users"); // better safe than sorry
$row = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";");
if($row->num_rows == 1){
$finalRow = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";");
$finalRow->fetch_array();
$finalresult = $finalRow['email'];
return $finalresult; // Line where error occurs
} else {
$Logger = new logger();
$Logger->logEvent("ERROR", "Could not find user $username for reverse lookup", true, 1);
return null;
}
}
logger()
是我的日志记录类,没有任何问题。
我尝试解决方案之前的代码:
public function lookupEmailByUsername($username)
{
$database = new mysqli(APP_DB_HOSTNAME, APP_DB_USERNAME, APP_DB_PASSWORD, APP_DB_DATABASE, APP_DB_PORT);
$database->select_db("stories_users");
if(!$database->query("SELECT * FROM `users` WHERE `username` = \"$username\";")){
$logger = new logger();
$logger->logEvent("ERROR", "Unable to execute search SQL for email lookup");
return null;
}
$row = $database->query("SELECT * FROM `users` WHERE `username` = \"$username\";");
if($row->num_rows == 1){
$row->fetch_assoc();
return $row['email'];
} else {
$Logger = new logger();
$Logger->logEvent("ERROR", "Could not find user $username for reverse lookup", true, 1);
return null;
}
}
但是当我return $row['email']
时,会发生错误。
像这样执行var转储:var_dump($row->num_rows)
返回1,这正是我正在寻找的。为什么?因为如果有一行,则意味着有一个用户。我的应用程序不允许重复用户。这意味着SQL是正确的。
当我尝试使用return $row['email']
和fetch_array
时,为什么fetch_assoc
会输出该错误?如上所述,有一行,fetch_assoc
应该将其转换为数组。
OPS:我刚发现row
不是数组:
if(is_array($row)){
echo "row is array";
exit;
}
else {
echo "row is not array";
exit;
}
但是我使用了fetch_assoc
。对不起,我是MySQLi面向对象部分的新手。
答案 0 :(得分:0)
According to the documentation,mysqli_result::fetch_assoc()
返回关联数组。它不会将mysqli_result
实例转换为一个实例。因此,您需要将fetch_assoc
返回的值存储在变量中(您可以使用$row
,这不需要在代码中进一步修改。)