2016-07-26 80 views
-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; 
    } 
} 
} 

代碼的最終性是在有數據時釋放結果。

回答

3

我不知道,但如果你只是複製上面的代碼中,我看到了一個錯誤: 更改以下行(在你的析構函數):

mysqli_free_result($this->$result); 

mysqli_free_result($this->result); 

在mysqli_free_result()參數中的'result'之前刪除$ -sign。 否則,php將該屬性解釋爲動態變量,並且它是未定義的。

我希望它修復錯誤,我可以幫助:)

+0

**哇,這是我沒有意識到這一點,謝謝 – Tapasa