首页 > 解决方案 > 无法使用 array_shift() 获得结果

问题描述

当我尝试通过 verify_user 方法验证用户数据时

<?php

public static function verify_user ($username , $password)
{
    global $database;

    $username = $database->escape_string($username);
    $password = $database->escape_string($password);

    $query = "SELECT * FROM users WHERE username = '{$username}' and  password = '{$password}' LIMIT 1";

    $result_array = self::find_this_query($query);

    if (!empty($result_array)) {
        $result_array = array_shift($result_array);

        return $result_array;
    } else {
        return false;
    }
}

这里还有我的 find_this_query 方法

public static function find_this_query ($enter_here_your_sql_query)
{
    global $database;

    $result = $database->query($enter_here_your_sql_query);

    return $result;
}

并尝试在这里登录用户也是我的 login.php 代码

<?php
if($session->is_signed_in()) {
    redirect("index.php");
}

if (isset($_POST['submit'])) {
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
}

//method to check db user
$user_found = User::verify_user($username , $password);

if ($user_found) {
    $session->login($user_found);

    redirect("index.php");
} else {
    $the_message = "<p class='alert alert-warning' style='color: grey'>Your password or username is incorrect</p>";
    $username = "";
    $password = "";
}
?>

我在登录页面上收到该错误

警告:array_shift() 期望参数 1 是数组,对象在第 189 行的 /admin/includes/User.php 中给出

这里来自 user.php 类的第 189 行

$result_array = array_shift($result_array);

我在这里做错了什么?

标签: phpmysql

解决方案


mysqli::query()函数不返回数组,而是返回一个mysqli_result对象。

mysqli_result实现了Traversable接口,它允许你在它上面使用一些数组操作foreach,但大多数其他数组操作都不起作用。特别是,您不能array_shift()在此对象上使用。

代替

$result_array = array_shift($result_array);
return $result_array;

利用:

$row = $result_array->fetch_assoc();
return $row;

推荐阅读