Wie schließt man die MySQLi-Verbindung?

habe den folgenden code, wenn ich versuche, führen Sie es in der Steuerung, erstellen Sie eine Instanz dieser Klasse und konsequent führen get_one, und dann get_two, gibt es einen Fehler, weil get_two mysql-Verbindung ist bereits geschlossen.

class Foo extends Bar
{
    function __construct()
    {

        parent::__construct();

        $this->mysqli = new mysqli($this->cfg->db->host, 
                                   $this->cfg->db->user, 
                                   $this->cfg->db->password, 
                                   $this->cfg->db->database);
        $this->mysqli->query('SET NAMES utf8');

    }

    public function get_one()
    {

        $table_one = array();

        $result = $this->mysqli->query('SELECT * FROM `table_one`');

        for ($i=0; $row = $result->fetch_assoc(); $i++) { 
            $table_one[] = $row;
        }

        $result->close();
        $this->mysqli->close();

        return $table_one;

    }


    public function get_two()
    {

        $table_two = array();

        $result = $this->mysqli->query('SELECT * FROM `table_two`');

        for ($i=0; $row = $result->fetch_assoc(); $i++) { 
            $table_two[] = $row;
        }

        $result->close();
        $this->mysqli->close();

        return $table_two;

    }

}

Den Sinn kommt, nur dieses

public function get_one($keep = false)
{
    ...
    if(!$keep)
      $this->mysqli->close();
    ...
}

Wie richtige Weg?

  • Warum wollen Sie die Verbindung schließen, in diesen Methoden überhaupt? Warum nicht schließen Sie es an der Destruktor Ebene.
  • Und diese beiden Prototypen für get_one sind für die gleiche Klasse?
  • Erstelle ich eine Instanz dieser Klasse $foo = $this->load("foo"); und Holen Sie sich die Daten $data['get_one'] = $foo->get_one(); $data['get_two'] = $foo->get_two(); in der Methode der jther Klasse.
  • Einfach loszuwerden, die $this->mysqli->close() ganz - es wird in der Nähe von selbst, wenn du fertig bist. Entweder das, oder sonst noch herausfinden, wo in Ihrem code, den Sie machen die Verbindung und finden eine parallele Punkt (ganz am Ende), um es zu schließen...
  • Sie können auch anpassen wollen Ihre for-Schleifen Anhängen jede Zeile anstelle von set das array mit dem Wert der Zeile. Verwenden array_push($table_one, $row); und array_push($table_two, $row);
InformationsquelleAutor Sasay | 2015-03-22
Schreibe einen Kommentar