Heim > Backend-Entwicklung > PHP-Tutorial > mysql - Was ist der beste Weg, eine Datenbank in PHP zu verbinden und freizugeben?

mysql - Was ist der beste Weg, eine Datenbank in PHP zu verbinden und freizugeben?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-04 09:20:14
Original
1538 Leute haben es durchsucht

Im Handbuch wird die Verbindung nach Abschluss jeder Abfrage geschlossen. Wenn es also mehrere Datenbankoperationen gibt, führt dies zu einer ständigen Generierung und Freigabe von Verbindungen. Ist das nicht unvernünftig?

Zum Beispiel gibt es eine.php, die 20 Funktionen enthält, von denen jede 20 Objekte instanziieren muss, und jedes Objekt verfügt über Datenbankoperationen.

Es gibt also drei Methoden:

1. Erhalten Sie eine Datenbankverbindung in jeder Klasse von 20 Objekten, der Vorgang wird abgeschlossen und geschlossen.
2. Rufen Sie die Datenbankverbindung in a.php ab, übergeben Sie die Verbindungsparameter in jeder Funktion und geben Sie sie schließlich in a.php frei.
3. Generieren Sie ein statisches Datenbankverbindungsobjekt und rufen Sie ConnectionClass::db
in jeder Klasse auf

Was besser ist, besprechen Sie es bitte.

.

Antwortinhalt:

Im Handbuch wird die Verbindung nach Abschluss jeder Abfrage geschlossen. Wenn es also mehrere Datenbankoperationen gibt, führt dies zu einer ständigen Generierung und Freigabe von Verbindungen. Ist das nicht unvernünftig?

Zum Beispiel gibt es eine.php, die 20 Funktionen enthält, von denen jede 20 Objekte instanziieren muss, und jedes Objekt verfügt über Datenbankoperationen.

Es gibt also drei Methoden:

1. Erhalten Sie eine Datenbankverbindung in jeder Klasse von 20 Objekten, der Vorgang wird abgeschlossen und geschlossen.

2. Rufen Sie die Datenbankverbindung in a.php ab, übergeben Sie die Verbindungsparameter in jeder Funktion und geben Sie sie schließlich in a.php frei.
3. Generieren Sie ein statisches Datenbankverbindungsobjekt und rufen Sie ConnectionClass::db
in jeder Klasse auf
Was besser ist, besprechen Sie es bitte.

.

Durch die Verwendung einer statischen Variablen zum Speichern der Datenbankverbindung können mehrere Funktionen nur einmal in einer Anfrage eine Verbindung zur Datenbank herstellen.

Wenn Sie dauerhafte Verbindungen aktivieren, können Sie einen PHP-FPM-Prozess erreichen, der eine Datenbank in mehreren Anfragen teilt . Die Datenbank ist verbunden.



mysql - Was ist der beste Weg, eine Datenbank in PHP zu verbinden und freizugeben?

@impig33 Die folgenden beiden Funktionsaufrufe geben das gleiche Ergebnis zurück. Es ist ersichtlich, dass die Verzweigung in else beim zweiten Mal nicht ausgeführt wird und eine Uniqid-Zahl nicht ausgeführt wird generiert werden
<code><?php
function db() {
    static $db; //静态变量
    if ($db) {
        return $db;
    } else {
        $db = new mysqli('p:127.0.0.1','user','pass','dbname',3306);
        return $db;
    }
}
function foo1() {
    return db()->query('SELECT * FROM table1')->fetch_all();
}
function foo2() {
    return db()->query('SELECT * FROM table2')->fetch_all();
}
var_export( foo1() );
var_export( foo2() );</code>
Nach dem Login kopieren

Ich weiß nichts über andere Datenbanken, aber MySQL unterstützt dauerhafte Verbindungen.
<code><?php
header('Content-Type: text/plain; charset=utf-8');
function db() {
    static $db; //静态变量
    if ($db) { return $db; } 
    else { $db = uniqid(mt_rand(), true); return $db; }
}
function foo1() { return db(); }
function foo2() { return db(); }
echo foo1()."\n";
echo foo2()."\n";</code>
Nach dem Login kopieren

Eine kontinuierliche Verbindung schließt die vorherige Datenbankverbindung nicht und die vorherige Verbindung wird direkt für die nächste Verbindung verwendet.


MySQLi

:

verfügt nicht über eine -Funktion ähnlich wie MySQL, aber Sie können beim Herstellen einer Verbindung vor dem Hostnamen hinzufügen. Weitere Informationen finden Sie auf der offiziellen PHP-Website: MySQLi-Erweiterung und dauerhafte Verbindung. Danke an @eechen für die Korrektur. pconnect() p:Im Gegensatz zur MySQL-Erweiterung bietet MySQL keine spezielle Methode zum Öffnen einer dauerhaften Verbindung. Wenn Sie eine dauerhafte Verbindung herstellen müssen, müssen Sie beim Herstellen der Verbindung p: vor dem Hostnamen hinzufügen.

PDO unterstützt auch lange Verbindungen: Verwenden Sie

) im vierten Parameter des neuen PDO, siehe offizielles PHP-Handbuch – PDO-Verbindung und Verbindungsverwaltung Beispiel4.

array(PDO::ATTR_PERSISTENT3Bah, es besteht kein Grund, darüber zu diskutieren. Normalerweise verwenden DB-Objekte den Singleton-Modus, was bereits Konsens ist.

Ich persönlich denke, dass 2 das Beste ist.

Sie können auch die Verwendung eines Verbindungspools in Betracht ziehen

https://www.baidu.com/s?wd=ph...


Ich denke auch, dass 3 den Singleton-Modus unterstützt

Ich weiß nicht, wie ich diese Antwort schreiben soll.

Eine Menge Dinge: Objekte, Destruktoren, Singletons, Abhängigkeitsinjektion, dauerhafte Verbindungen

Endlich wurde mir plötzlich klar, dass dies nicht schwierig ist, ich habe es analysiert und verstanden, wie zum Beispiel Phalcon. von.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage