未捕获的错误:调用未定义的方法stdClass :: update(),即使该方法已明确定义

时间:2016-03-01 13:18:44

标签: php

我正在

  

未捕获错误:调用未定义的方法stdClass :: update()   /Applications/XAMPP/xamppfiles/htdocs/gallery/admin/includes/content.php:14   堆栈跟踪:#0   /Applications/XAMPP/xamppfiles/htdocs/gallery/admin/index.php(11):   require_once()#1 {main}引入   /Applications/XAMPP/xamppfiles/htdocs/gallery/admin/includes/content.php   在第14行。

但是,方法update()已定义。这是用户类:

class User {
    public $username;
    public $password;
    public $first_name;
    public $last_name;

    public static function find_query($query) {
        global $db;

        $obj_arr = NULL;

        if($db -> query($query) -> num_rows != 1) {
            $users = $db -> query($query);

            while($user = $users -> fetch_object()) {
                $obj_arr[] = $user; 
            }

            return $obj_arr;
        } else {
            return $db -> query($query) -> fetch_object();
        }
    }

    public static function find_all() {
        return self::find_query("SELECT * FROM users");
    }

    public static function get_user_byId($id) {
        return self::find_query("SELECT * FROM users WHERE id=$id LIMIT 1");
    }

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

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

        $q = "SELECT * FROM users WHERE username='$username' AND password='$password' LIMIT 1";

        return self::find_query($q);
    }

    public function create() {
        global $db;

        $username = $db -> escape_string($this -> username);
        $password = $db -> escape_string($this -> password);
        $first_name = $db -> escape_string($this -> first_name);
        $last_name = $db -> escape_string($this -> last_name);

        $q = "INSERT INTO users (username, password, first_name, last_name) ";
        $q .= "VALUES ('$username', '$password', '$first_name', '$last_name')";

        if($db -> query($q)) {
            $this -> id = $db -> insert_id();

            return true;
        } else {
            return false;
        }
    }

    public function update() {
        global $db;

        $id = (int) $id;

        $username = $db -> escape_string($this -> username);
        $password = $db -> escape_string($this -> password);
        $first_name = $db -> escape_string($this -> first_name);
        $last_name = $db -> escape_string($this -> last_name);

        $q = "UPDATE users SET username='$username', password='$password', first_name='$first_name', last_name='$last_name' ";
        $q .= "WHERE id=$id";

        //return (mysqli_affected_rows($db -> db) == 1) ? true:false;
        return ($db -> db -> affected_rows == 1) ? true:false;
    }
}

我这样称为更新:

$user = User::get_user_byId(4);
$user -> password = 'newpass';
$user -> update();

其他方法正常,只有update()。这可能是一个实例化问题吗?如果这是一个愚蠢的问题,我很抱歉。我在这里寻找答案,但找不到足以解决问题的相关内容。感谢。

2 个答案:

答案 0 :(得分:0)

您应该使用:

return $db -> query($query) -> fetch_object("User");
默认情况下,

fetch_object()会返回Standard ClassstdClass)个对象。这就是你获得Call to undefined method stdClass::update()的原因。您可以通过在函数的第一个参数中传递其名称来提供所需的类名。

答案 1 :(得分:-2)

  

用户:: get_user_byId

不会为您提供User类的实例。所以$ user没有任何Class User方法。

您必须创建类用户的实例,如

  

$ user = new User();

你可以使用像

这样的方法
  

$用户>更新();