使用mysqli-> fetch_assoc() - 不能使用mysqli_result类型的对象作为数组

时间:2017-01-01 01:40:13

标签: php arrays mysqli

我最近在编写应用程序的一大块时遇到了这种困境。 我收到以下错误: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面向对象部分的新手。

1 个答案:

答案 0 :(得分:0)

According to the documentationmysqli_result::fetch_assoc() 返回关联数组。它不会将mysqli_result实例转换为一个实例。因此,您需要将fetch_assoc返回的值存储在变量中(您可以使用$row,这不需要在代码中进一步修改。)