PHP-OOP-Datenbank verbinden

8

Ich habe gerade angefangen, das Konzept der objektorientierten Programmierung zu lernen, und ich habe diese Klasse mit Funktionen geschrieben.

Es funktioniert gut, aber ich bin daran interessiert zu wissen, ob ich das richtig gemacht habe ...

Hier ist mein Code:

%Vor%     
PiraTa 22.12.2013, 18:57
quelle

6 Antworten

12

Bitte verwenden Sie PDO oder MySQLi, da es sicherer ist und die Funktionen von mysql_ * wie oben angegeben veraltet sind. Ich habe einen generischen Code mit PDO zur Verfügung gestellt, um Ihnen bei diesem neuen Projekt zu helfen. Wie in den Kommentaren erwähnt, sollten Sie wirklich nicht die Daten widerspiegeln, wenn Sie nach einem objektorientierten Design suchen, was Sie tun sollten, nachdem Sie die Abfrage ausgeführt haben, geben Sie die Zeilen zurück, die Sie abgerufen haben, und verwenden Sie etwas B. eine foreach-Schleife, um Ihre Daten anzuzeigen. Wenn Sie Ihre Datenbankklasse auf diese Weise ausführen, wird auch sichergestellt, dass mehrere Datenbankverbindungen nicht gleichzeitig geöffnet sind. Beachten Sie, dass dieser Code nur für Sie als Referenz dient und vor der Verwendung in der Produktion oder unter Live-Tests getestet werden sollte.

config.php:

%Vor%

database.class.php:

%Vor%

index.php:

%Vor%     
ZZPLKF 22.12.2013 19:34
quelle
3

Die Antwort von Sieu Phan ist in Ordnung, aber es stellt nicht wirklich sicher, dass Sie nur eine Verbindung geöffnet haben (würden Sie die config.php -Datei mehrere Male einschließen, würde es würde sein) Erstellen Sie mehrere Verbindungen).

Es ist möglich, die Verbindung mit Datenbanken mithilfe von Autoloading- und Abhängigkeitsinjektionscontainern zu verbessern. Hier ist eine Möglichkeit, Auryn zu verwenden, um sich mit Ihrer Datenbank zu verbinden, während Sie sicher sind, dass nur eine Verbindung geöffnet ist und Sie keine Dateien manuell anfordern müssen während Ihrer Bewerbung.

Ich werde hier nur PDO und Auryn behandeln. Es gibt andere Dependency-Injection-Container und insbesondere die Erweiterung mysqli , um eine Verbindung zur Datenbank herzustellen, aber der Inhalt sollte Ihnen helfen Verwenden Sie einen anderen Container, wenn Sie dies wünschen.

Die Datenbankklasse

Eine Datenbankklasse ist überflüssig. Die Klasse \PDO stellt bereits alle notwendigen Methoden bereit, um die Datenbank abzufragen. Wenn Sie eine Datenbankklasse haben, werden Sie tatsächlich alle bereits vorhandenen Funktionen wiederholen und Ihre Aktionen einschränken (oder viele Funktionen erstellen), wenn Sie beispielsweise mehrere verschiedene Abrufstile je nach Ihren Anforderungen in einer bestimmten Methode verwenden möchten. p>

Abhängigkeitsinjektion

Wenn Sie es noch nicht getan haben, lesen Sie bei der Abhängigkeitsinjektion . Der Punkt ist, dass wenn eine Klasse auf die Datenbank zugreifen muss, sie sich nicht darum kümmern muss, das \PDO -Objekt zu konstruieren, es sollte damit konstruiert werden:

%Vor%

Beachten Sie, dass ich das Objekt \PDO direkt übergebe, nicht eine Wrapper-Klasse. Auf diese Weise habe ich immer Zugriff auf alle Funktionen, nicht nur auf eine Teilmenge der benutzerdefinierten Funktionen.

Dependency-Injektionscontainer

Ein Dependency-Injection-Container hilft beim Aufbau Ihrer Klassen, gibt ihnen die Objekte, die sie benötigen, und gibt Ihnen große Flexibilität bei der Erstellung dieser Objekte. Hier konzentriere ich mich nur auf die Konfiguration und Freigabe eines \PDO Objekts durch die Verwendung von Auryn.

Ich nehme an, dass Sie die erforderliche Auryn-Klasse installiert haben, der einfachste Weg ist Komponist . Dies ist nicht Gegenstand dieser Antwort. Es gibt mehrere Ressourcen zur Verwendung.

  • Erstellen Sie den Injektor

    %Vor%
  • Definieren Sie die \PDO -Klassenparameter

    %Vor%

    Sie können die Konfigurationsparameter entweder direkt hier eingeben oder aus einer Konfigurationsdatei beziehen. Ich habe gerne eine config.ini-Datei und benutze parse_ini_file() , um meine Konfigurationsoptionen zu erhalten , da ich Datenbanken leicht durch Bearbeiten einer Konfigurationsdatei wechseln kann.

  • Teilen Sie das \PDO -Objekt

    %Vor%

    Dieser Teil ist wirklich wichtig. Diese Zeilen bewirken, dass der Injektor jedes Mal das gleiche \PDO -Objekt gibt, wenn er damit beauftragt wird, eine Klasse aufzubauen, die eine Verbindung benötigt. Beachten Sie, dass die Reihenfolge der Zeilen nicht wichtig ist. Sie können die Klasse freigeben, bevor Sie sie definieren. Stellen Sie nur sicher, dass Sie nach dem Schreiben dieser beiden Zeilen eine Datenbank erstellen, die Klassen benötigt.

  • Erstellen Sie Ihre Objekte

    %Vor%

    Das ist es. Der Injektor erstellt Ihr Mapper-Objekt und erstellt das \PDO -Objekt, falls noch nicht geschehen, und übergibt die vorhandene Instanz, falls vorhanden.

Autoloading

Wenn Sie Composer verwendet haben, können Sie den großen Autoloader verwenden. Andernfalls können Sie auch einen eigenen Autoloader erstellen.

Der Punkt hier ist, dass du require() überall im Code hast, besonders wenn du komplexe Klassenhierarchien hast, die du in einem Single-Responsibility konformes Klassensystem.

Zusammenfassung

Mit dieser Konfiguration können Sie nun das \PDO -Objekt in Ihren Klassen verwenden, während sichergestellt wird, dass es nur eine Instanz pro Anfrage gibt, ohne dass Dateien überall benötigt werden müssen und ohne ein Singleton-Anti-Pattern zu verwenden / p>     

Félix Gagnon-Grenier 28.11.2015 19:59
quelle
-1
%Vor%     
Amit HJ Dimensions 08.10.2014 12:29
quelle
-3
  

$ objConn = new mysqlconnect ();   $ Conn = $ objConn- & gt; setobjConnect ("localhost", "root", "P @ ssw0rd");

    
Siwakorn Takeaw 12.08.2014 09:17
quelle
-3
%Vor%     
morteza 22.01.2015 06:46
quelle
-6
%Vor%

1

    
Siwakorn Takeaw 12.08.2014 09:24
quelle

Tags und Links