2016-07-19 13 views
0

Ich versuche, Daten in MySQL-Datenbank einzufügen. Ich habe Klasse VerbindungPHP OOP query() Fehler - Aufruf an undefinierte Methode connection :: query()

class connection{ 
function __construct(){ 
    $servername = 'localhost'; 
    $username = 'root'; 
    $password = ''; 
    $database='products2'; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password,$database); 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
     return false; 
    }else{ 
     echo "succesful connection!</br>"; 
     $this->query=$conn; 
     return true; 
    }  
} 
} 

Und eine andere Klasse in Hexe, die ich versuchen, Daten in die Datenbank einfügen (ich versuche, dies dieser Klasse in __construct zu tun)

$sql="INSERT INTO products (name,price,category,f_material,f_size) VALUES ('nosaukums','cena','kategorija,'materials','izmers')"; 
$db=new connection(); 
$result=$db->query($sql); 

Jedoch habe ich diesen errror erhalten:

Fatal error: Call to undefined method connection::query() in ....

+0

Die Klassenverbindung hat keine query() -Methode. Das mysqli-Objekt, das in der __construct() -Methode erzeugt wird, hat dies, –

+3

Der Fehler ist ziemlich selbsterklärend..Es gibt keine Methode mit dem Namen 'query' in Ihrer' connection'-Klasse – mituw16

+0

Blick auf offizielle PHP-Dokumentation [http: // php. net/manual/de/mysqli.query.php] Ich habe verstanden, dass es eine eingebaute Funktion ist. Also bin ich falsch? @ CT14.IT –

Antwort

2

Um die Methode query (from mysqli class) verwenden zu können, müssen Sie eine neue Methode public function query() {} erstellen. Diese Methode kann die mysqli-Methode verwenden. Am Ende werden Sie in der Lage sein, um das gleiche Ergebnis acheive sondern von ‚query‘ auf Ihrem eigenen Objekt ($ db) wie so $result = $db->query($sql);

Hier ist die Klasse Anwendung:

<?php 

class connection{ 

    // define a variable for the database connection 
    private $conn; 

    // when an instance of 'connection' class is created a connection is made through mysqli 
    public function __construct() 
    { 
    $servername = 'localhost'; 
    $username = 'root'; 
    $password = ''; 
    $database='products2'; 

    // the connection is stored inside the private variable 
    $this->conn = new mysqli($servername, $username, $password,$database); 

    // Check connection 
    if ($this->conn->connect_error) { 
     die("Connection failed: " . $this->conn->connect_error); 
     return false; 
    } else{ 
     echo "succesful connection!</br>"; 
     return true; 
    }  
    } 

    // method used to send a query to database 
    public function query($sql) 
    { 
    // here you use the connection made on __construct() and apply the method query. Basically we are using inside our method (called query) a method (call query too) from the mysqli class 
    $this->conn->query($sql); 
    return true; 
    } 

} 

Aufruf der Methode:

+0

'$ this-> db' oder' $ this-> conn'? – tadman

+0

Tut mir leid, es ist '$ this-> conn' in Methodenabfrage. Ich bearbeite meinen Beitrag ... – Ivan

+0

@ivan Es funktioniert. So wie ich diesen Teil verstehe: '$ this-> conn-> query ($ sql);' von der query() Funktion ruft mysqli class schon right auf? –

0

Da in Ihrer letzten Zeile - $result = $db->query($sql); - Sie versuchen, eine Funktion namens "Abfrage" aufzurufen. Wenn Sie in Ihre Verbindungsklasse schauen, ist die einzige Funktion, die Sie haben, der Konstruktor.

Um dies zu beheben, müssen Sie eine Funktion namens "Abfrage" hinzufügen (beachten Sie, dass dies kein idealer Name für die Funktion ist).

Hier einige kommentierten Code ist (nicht fehlerfrei sein, garantiert!)

class connection{ 

    protected $conn; // add conn so that you can use it later 

    function __construct() 
    { 
     $servername = 'localhost'; 
     $username = 'root'; 
     $password = ''; 
     $database='_mvc'; 

     // Assign $this->conn to a database object 
     $this->conn = new mysqli($servername, $username, $password, $database); 

     // Remember we are checking >>THIS<< conn now 
     if ($this->conn->connect_error) { 
      die("Connection failed: " . $this->conn->connect_error); 
      return false; 
     }else{ 
      // no need to assign anthing here as the database object has already been assigned to $this->conn 
      echo "succesful connection!</br>"; 
      return true; 
     } 
    } 

    // here is the missing function 
    public function query($sql) { 
     // now we are accessing the database objects query method and massing the SQL 
     return $this->conn->query($sql); 
    } 
} 

$sql = 
"INSERT INTO products (name,price,category,f_material,f_size) 
VALUES ('nosaukums','cena','kategorija,'materials','izmers')"; 

$db = new connection(); 
$result = $db->query($sql); 

ich Sie direkt in PHP Data Objects würde empfehlen, springen und mit ihm getan werden, da PDO die beste ‚Standard‘ Weg ist, Zugriff auf Datenbanken in diesen Tagen.

Verwandte Themen