2016-07-26 4 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() 인수에서 '결과'앞에 $ -sign을 제거하십시오. 그렇지 않으면 PHP는 속성을 동적 변수로 해석하며 정의되지 않습니다.

가 나는 오류를 수정 희망 나는 :)

+0

** 와우 **, 즉 내가 그것에 대해 몰랐습니다, 감사합니다 도움이 될 수 – Tapasa

관련 문제