-1
我想釋放一個mysqli結果,變量被定義,然後是未定義的,我不知道發生了什麼,但是太奇怪了。定義未定義的結果mysql_free_result
public function __destruct() {
if(isset($this->result) && is_a($this->result, "mysqli_result")) {
var_dump($this->result);
mysqli_free_result($this->$result);
}
mysqli_close($this->conexion);
}
如果isset,是它在條件進入mysqli_result類型,它進入我得到這個:
Notice: Undefined variable: result in C:\xampp\htdocs\Proyectos\Tell Yourself\app\model\Database.class.php on line 22
這是滿級:
abstract class Database {
protected $conexion;
protected $result;
public function __construct() {
if(!isset($this->conexion)) {
if($this->conexion = mysqli_connect("localhost", "root", "", "tellYourself")) {
return true;
}
else {
echo "No se ha podido realizar conexion con la base de datos: ".mysqli_connect_error();
return false;
}
}
}
public function __destruct() {
if(isset($this->result) && is_a($this->result, "mysqli_result")) {
var_dump($this->result);
mysqli_free_result($this->$result);
}
mysqli_close($this->conexion);
}
protected function query($query) {
if($this->result = mysqli_query($this->conexion, $query)) {
/*if(is_a($this->result, "mysqli_result")) {
$this->result = mysqli_fetch_object($this->result);
}*/
return $this->result;
}
else {
return false;
}
}
}
這是孩子:
require_once("app/model/Database.class.php");
class User extends Database {
public function __construct() {
parent::__construct();
}
public function __destruct() {
parent::__destruct();
}
public function login($email, $password) {
$email = mysqli_real_escape_string($this->conexion, $email);
$password = md5($password);
$loginQuery = "SELECT id, username FROM users WHERE email='$email' and password='$password';";
if($result = $this->query($loginQuery)) {
$result = mysqli_fetch_object($result);
$_SESSION["username"] = $result->username;
return true;
}
else {
return false;
}
}
public function register($username, $email, $password) {
$username = mysqli_real_escape_string($this->conexion, $username);
$email = mysqli_real_escape_string($this->conexion, $email);
$password = md5($password);
$activationCode = md5($username.rand(0, 100));
$registerQuery = "INSERT INTO users(username, email, password) VALUES('$username', '$email', '$password');";
if($this->query($registerQuery)) {
$activationCodeQuery = "INSERT INTO user_emailconfirm(userId, activeCode) VALUES(".mysqli_insert_id($this->conexion).", '$activationCode');";
if($this->query($activationCodeQuery)) {
return array("userID" => mysqli_insert_id($this->conexion), "activationCode" => $activationCode);
}
}
else {
return false;
}
}
public function activateUser($activationCode, $userID) {
$activateUserQuery = "SELECT userId, activeCode FROM user_emailconfirm WHERE userId='$userID' and activeCode='$activationCode';";
if($result = $this->query($activateUserQuery)) {
var_dump($result);
if(mysqli_num_rows($result) == 1) {
$activateUserQuery = "UPDATE user_emailconfirm SET confirmed=1 WHERE userId='$userID' and activeCode='$activationCode';";
if($this->query($activateUserQuery)) {
return true;
}
}
}
else {
return false;
}
}
}
代碼的最終性是在有數據時釋放結果。
**哇,這是我沒有意識到這一點,謝謝 – Tapasa