/ / Öffnen die mysql-Funktionen eine neue mysql-Verbindung, wenn der mysql-Link nicht angegeben ist? - PHP, MySQL, Codeigniter

Öffnen die mysql-Funktionen eine neue mysql-Verbindung, wenn der mysql-Link nicht angegeben ist? - PHP, MySQL, Codeigniter

Öffnen Funktionen wie mysql_query, mysql_real_escape oder mysql_error eine neue mysql-Verknüpfung, wenn sie nicht angegeben ist?

php.net sagt das

Die MySQL-Verbindung. Wenn der Link-Bezeichner nicht angegeben ist, wird der letzte von mysql_connect () geöffnete Link angenommen

Was aber, wenn die Verbindung innerhalb einer Klasse hergestellt wurde? Kann PHP den Link finden?

(Ich benutze das Codeigniterrahmenwerk, wenn das irgendeine Hilfe ist)

Antworten:

2 für die Antwort № 1

Was Sie eigentlich fragen, ist Ihre DatenbankVerbindung wird in Bezug auf das Singleton-Muster hergestellt oder nicht, und die Antwort ist offensichtlich "nein". Wenn Sie die Klasse an mehreren Stellen instanziieren, hat jede Instanz ihre eigene Ressource. Als Konsequenz bedeutet dies, dass unabhängig von der Instanz, von der Sie mysql_query aufrufen, die letzte Instanz verwendet wird, die erkannt wird und die tatsächlich während der letzten Instanziierung der Klasse erstellt wird, die die Verbindung herstellt.

[Später bearbeiten]

Sie werden in diese Situation geraten, wenn Sie etwas Ähnliches haben mit:

    //Database.class.php

class Database {
public function connect_db() {
//connection logic here
}

public static function query_db($query) {
$this->connect_db();
//query database logic here
}

}


//index.php
include "path/to/Database.class.php";

$sql = "SELECT * FROM `whatever_i_want`";
Database::query_db($sql);

//repeat the last two lines multiple times

Nun, das ist schlechtes Design. In diesem Szenario werden Sie jedes Mal eine Verbindung herstellen, wenn Sie die Datenbank abfragen. Um dies zu vermeiden, sollte die folgende kleine Änderung den Trick bewirken:

    //Database.class.php
public function __construct() {
$this->connect_db();
}

public function query_db($query) {
//query database logic here
//note the missing call to connect_db()
}
//the rest remains unchanged

//index.php
$db = new Database();

$db->query_db($sql);
//the rest remains unchanged

Bitte beachten Sie, dass dies nicht Singleton ist,das Muster, von dem ich dir vorher erzählt habe, und es ist auch kein gutes Design. Dies dient nur dazu, zu zeigen, wie PHP entscheidet, welche Verbindung verwendet werden soll. Im letzten Beispiel wird die Datenbankverbindung nur einmal ausgeführt, und danach wird unabhängig von der Anzahl der ausgeführten Abfragen die Verbindungsressource verwendet, die die Klasse instanziiert.

Wenn wir nun das letzte Beispiel modifizieren, fügen wir dieses zur index.php hinzu:

    //index.php
$db2 = new Database();

$db2->query_db($sql);
$db->query_db($sql);

Beide Abfragen verwenden die Ressource, die vom Erstellen des Objekts $ db2 stammt, da dies das letzte ist, das PHP erkennt.