2017-03-22 4 views
1

je le code suivant en php pour se connecter à ma base de données:PHP - Appel à une requête de fonction membre() sur null - Erreur

<?php 
class MY_SQL{ 
    private $username; 
    private $password; 
    private $conn; 

    public function __construct($SERVERNAME){ 
     $this->username = "username"; 
     $this->password = "password"; 

     if($SERVERNAME == "data_"){ 
      $server = "Servername"; 
     } 
     else { 
      $server = $SERVERNAME; 
     } 

     // Create connection 
     $conn = new mysqli($server, $this->username, $this->password); 

     // Check connection 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 
     } 
    } 

    public function SQLCommand($cmd) { 
     if ($this->conn->query($cmd) === TRUE) { 
      echo "New record created successfully"; 
     } else { 
      echo "Error: " . $cmd . "<br>" . $conn->error; 
     } 
    } 
} 

$sql = "INSERT INTO _test(test1, test2) VALUES ('hello','hi');"; 

     $database = new MY_SQL("Servername"); 
     $database->SQLCommand($sql); 
?> 

Je reçois l'erreur suivante:

Fatal error: Call to a member function query() on null

Qu'est-ce qui ne va pas?

+0

Oublier pour sélectionner la base de données !!! – Saty

+0

@Saty Vous avez raison! – float

Répondre

4
$this->conn = $conn; in __construct() 
+0

Cela a fait le travail! Merci! – float

3

Je vous suggère d'améliorer votre classe avec cet exemple (tiré https://github.com/opencart/opencart/blob/master/upload/system/library/db/mysqli.php)

final class My_SQLi 
{ 
    private $connection; 

    public function __construct($hostname, $username, $password, $database, $port = '3306') 
    { 
     $this->connection = new \mysqli($hostname, $username, $password, $database, $port); 

     if ($this->connection->connect_error) { 
      throw new \Exception('Error: ' . $this->connection->error . '<br />Error No: ' . $this->connection->errno); 
     } 

     $this->connection->set_charset("utf8"); 
     $this->connection->query("SET SQL_MODE = ''"); 
    } 

    public function query($sql) 
    { 
     $query = $this->connection->query($sql); 

     if (!$this->connection->errno) { 
      if ($query instanceof \mysqli_result) { 
       $data = array(); 

       while ($row = $query->fetch_assoc()) { 
        $data[] = $row; 
       } 

       $result = new \stdClass(); 
       $result->num_rows = $query->num_rows; 
       $result->row = isset($data[0]) ? $data[0] : array(); 
       $result->rows = $data; 

       $query->close(); 

       return $result; 
      } else { 
       return true; 
      } 
     } else { 
      throw new \Exception('Error: ' . $this->connection->error . '<br />Error No: ' . $this->connection->errno . '<br />' . $sql); 
     } 
    } 

    public function escape($value) 
    { 
     return $this->connection->real_escape_string($value); 
    } 

    public function countAffected() 
    { 
     return $this->connection->affected_rows; 
    } 

    public function getLastId() 
    { 
     return $this->connection->insert_id; 
    } 

    public function isConnected() 
    { 
     return $this->connection->ping(); 
    } 

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

$sql = "INSERT INTO _test(test1, test2) VALUES ('hello','hi');"; 

$mysql = new My_SQLi('host', 'user', 'password', 'db'); 
$result = $mysql->query($sql); 
+0

Merci, je vais jeter un coup d'oeil! – float