2013-03-31 7 views
5

ho questa classe per la connessione al mysql database utilizzando php/mysqli:

class AuthDB { 
    private $_db; 

    public function __construct() { 
     $this->_db = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME) 
     or die("Problem connect to db. Error: ". mysqli_error()); 
    } 

    public function __destruct() { 
     $this->_db->close(); 
     unset($this->_db); 
    } 
} 

ora, ho qualsiasi pagina per l'utente lista:

require_once 'classes/AuthDB.class.php'; 

session_start(); 

$this->_db = new AuthDB(); // error For This LINE 
$query = "SELECT Id, user_salt, password, is_active, is_verified FROM Users where email = ?"; 
$stmt = $this->_db->prepare($query); 

     //bind parameters 
     $stmt->bind_param("s", $email); 

     //execute statements 
     if ($stmt->execute()) { 
      //bind result columnts 
      $stmt->bind_result($id, $salt, $pass, $active, $ver); 

      //fetch first row of results 
      $stmt->fetch(); 

      echo $id; 


     } 

ora, vedo questo errore:

Fatal error: Using $this when not in object context in LINE 6 

Come risolvere questo errore ?!

+2

$ questo esiste solo all'interno della definizione di classe la sua auto, per cui non è possibile utilizzarlo al di fuori di una classe – bizzehdee

+1

'$ this' si riferisce alla classe quando si è ** all'interno ** di una classe. Al di fuori di esso non ha significato. – elclanrs

risposta

6

Come l'errore dice, non è possibile utilizzare $this al di fuori della definizione della classe. Per utilizzare $_db al di fuori della definizione della classe, in primo luogo rendere public invece di private:

public $_db

Quindi, utilizzare questo codice:

$authDb = new AuthDb(); 
$authDb->_db->prepare($query); // rest of code is the same 

-

Dovete capire che cosa $this in realtà significa. Se utilizzato all'interno di una definizione di classe, $this viene utilizzato per fare riferimento a un oggetto di tale classe. Quindi, se si ha una funzione foo all'interno AuthDB, e avevi bisogno di accedere $_db dall'interno foo, si usa per dire $this PHP che si desidera che il $_db dallo stesso oggetto che foo appartiene.

Si potrebbe desiderare di leggere questa domanda StackOverflow: PHP: self vs $this

+0

grazie risposta utile! cambio 'private $ _db' in' public $ _db' nella mia classe e sostituisco '$ authDb' con' $ this' il mio errore è fisso MA vedo un nuovo errore: 'Errore fatale: chiamata a una funzione membro bind_param() su un non-oggetto in 'come risolvere questo errore? dov'è il mio problema? –

+0

@ B.BKing potresti voler aprire una nuova domanda, ma è probabile che la tua '$ query' non sia valida. – Tushar

+0

oh yeap! Grazie. –