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);
undarray_push($table_two, $row);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen Sie nicht schließen Sie die MySQL-Verbindung in jeder Funktion, sondern auf die Vernichtung der Klasse. Seit PHP 5 können Sie die __destruct () - Funktion. Wenn es nicht mehr alle aktiven Verweise auf ein Objekt ist diese Funktion automatisch aufgerufen. Versuchen Sie es entfernen:
Vom get_one() und get_two(). Dann fügen Sie die folgende Funktion in der Klasse:
So können Sie die Verbindung zu schließen, die auf die Vernichtung der Klasse.