我正在
未捕获错误:调用未定义的方法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()
。这可能是一个实例化问题吗?如果这是一个愚蠢的问题,我很抱歉。我在这里寻找答案,但找不到足以解决问题的相关内容。感谢。
答案 0 :(得分:0)
您应该使用:
return $db -> query($query) -> fetch_object("User");
默认情况下, fetch_object()
会返回Standard Class
(stdClass
)个对象。这就是你获得Call to undefined method stdClass::update()
的原因。您可以通过在函数的第一个参数中传递其名称来提供所需的类名。
答案 1 :(得分:-2)
用户:: get_user_byId
不会为您提供User类的实例。所以$ user没有任何Class User方法。
您必须创建类用户的实例,如
$ user = new User();
你可以使用像
这样的方法$用户>更新();