Verwenden von PHP-Datenobjekten

  • Erforderliche Kenntnisse: Einige Kenntnisse in PHP und SQL sind hilfreich
  • Benötigt: Ein Webserver (wie Apache) mit geladenem PHP und ein relationales Datenbankverwaltungssystem mit PDO-Konnektivität (wie MySQL); ODBC und Doctrine 2 sind optionale Extras
  • Projektzeit : 1-3 Stunden (oder mehr, abhängig von Ihrem zufälligen Lernpfad und Ihrer Kapazität)
  • Quelldatei

Dieser Artikel erschien zuerst in Ausgabe 231 des .net Magazins.

Die dynamische Entwicklung von Websites und Anwendungen scheint heutzutage üblicher zu sein als die statische Erstellung von Websites, und mit der dynamischen Entwicklung geht die Notwendigkeit einher, Daten zu speichern.

Ein beliebtes Datenbankverwaltungssystem, das neben der PHP-Sprache verwendet wird, ist die MySQL-Datenbank, wobei Microsoft SQL, PostgreSQL und Oracle ebenfalls weit verbreitet sind. Die PHP-Entwicklergruppe erleichterte zunächst die Verbindung zwischen PHP und den Datenbanksystemen mithilfe datenbanksystemspezifischer Funktionen wie:

MySQL: Ressource mysql_query (Zeichenfolge $ query [, Ressource $ link_identifier])
Microsoft SQL: gemischte mssql_query (Zeichenfolge $ query [, resource $ link_identifier [,
int $ batch_size = 0]])
PostgreSQL: Ressource pg_query ([Ressource $ Verbindung], Zeichenfolge $ Abfrage)
Oracle-Datenbank: bool oci_execute (Ressourcenanweisung $, [int $ mode = OCI_
COMMIT_ON_SUCCESS])



Star Wars Rogue ein offizielles Poster

Wie Sie den Definitionen entnehmen können, haben sie keine standardisierte Form. Wenn Sie also Ihr Datenbanksystem von Oracle auf MySQL ändern müssten, müssten Sie Ihren Code durcharbeiten und die Art und Weise ändern, wie Sie eine Verbindung zu Ihrer Datenbank herstellen. Es ist auch ein Dorn im Auge, etwas über Datenbankkonnektivität in PHP zu lernen: Sie können Ihr Wissen nicht einfach von beispielsweise PostgreSQL auf Microsoft SQL übertragen.

01. Die Philosophie von PHP Data Objects (PDO)

Zum Glück gibt es in PHP einen Retter für die Datenbankkonnektivität - und zwar in Form des dreistelligen Akronyms PDO, das für PHP Data Objects steht. Die Idee der PDO-Bibliothek besteht darin, dass sie eine standardisierte Grundlage bietet, auf der Sie eine Verbindung zu jedem relationalen Datenbankverwaltungssystem (RDBMS) herstellen können, das mit SQL abgefragt werden kann.

Mit etwas Glück sollte Ihr PDO-Erstellungsskript eine gültige Tabelle wie die oben genannte in Ihrer Datenbank erstellen

Mit etwas Glück sollte Ihr PDO-Erstellungsskript eine gültige Tabelle wie die oben genannte in Ihrer Datenbank erstellen

Zum Zeitpunkt des Schreibens umfasst dies CUBRID, Firebird, Interbase, IBM DB2, Informix, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, 4D und alle Datenbanken, die über ODBC verbunden werden können.

Anhand eines kurzen konzeptionellen Beispiels der Änderungen hätten wir zuvor gesehen:

_query ($ sql);

Wir sehen jetzt einen standardisierten Satz von Funktionen, der ungefähr so ​​aussieht:

$ conn-> query ($ sql);

Aber das ist vorerst genug Theorie - werfen wir einen Blick auf diese leistungsstarke Bibliothek in Aktion! PDO hat zwei unterschiedliche Aspekte: Der erste ist die Verbindung - die eindeutig ein erforderliches Element ist -, während die zweite Seite das abfragende Element ist.

02. Verbindung zu einem Datenbankverwaltungssystem herstellen

Bevor wir Daten abfragen, müssen wir eine Verbindung zu einem bereits installierten und eingerichteten Datenbankverwaltungssystem herstellen. Im ersten Beispiel stellen wir eine Verbindung zu einer MySQL-Datenbank her, die auf localhost ausgeführt wird:

PDO ('mysql: host = localhost; dbname = yourdbname', 'username', 'password');

Vergleichen wir das mit der Verbindung zu einer PostgreSQL-Datenbank:

w PDO ('pgsql: host = localhost; dbname = yourdbname', 'username', 'password');

Die Verbindungen werden dank des ersten Beispiels mit derselben Funktion standardisiert, während das zweite das standardisierte DSN-System (Data Source Name) verwendet. Sie können sehen, wie einfach es ist, wenn Sie nur von einem Datenbankverwaltungssystem zu einem anderen wechseln möchten.

Drupal 7 hat PDO hinter seinen Datenbankabstraktionsschichten. Die offizielle Drupal-Dokumentation dazu ist eine großartige Möglichkeit, mehr über die Integration zu erfahren

Drupal 7 hat PDO hinter seinen Datenbankabstraktionsschichten. Die offizielle Drupal-Dokumentation dazu ist eine großartige Möglichkeit, mehr über die Integration zu erfahren

03. Ergebnisse abfragen und lesen

Das Abfragen von Daten ist anfangs interessanter als das Erstellen von Daten. Da dies ein Tutorial zur Datenkonnektivität und nicht zu SQL ist, werden wir später direkt mit dem Abfragen und Besuchen, Erstellen, Einfügen, Aktualisieren und Löschen beginnen.

Wir gehen davon aus, dass wir einen Tisch namens haben Profil Hier werden verschiedene Details zu Benutzern einer hypothetischen Webanwendung aufgelistet. Lassen Sie uns als Beispiel einen schnellen Profilabruf in SQL über PDO ausführen und dann einfach die vollständigen Namen wiedergeben. Beachten Sie, wie die Abfragefunktion als Iterator verwendet werden kann - eine Funktion, die einen Zeiger im Speicher auf das aktuelle Element eines Arrays (oder in diesem Fall die Ergebnismenge) speichert. Wenn dies mit a kombiniert wird für jedes Schleife ermöglicht eine schnelle und einfache Methode für den Zugriff auf Zeilen:

$ conn = new $ conn = new $ conn = new $ conn = neforeach ($ conn-> query ('SELECT * FROM profile') als $ row) echo
$ row ['fullname'];

Das geht natürlich schnell und einfach, aber wir wollen kaum jemals alle Zeilen abrufen. Lassen Sie uns daher einige Bedingungen durch variable Injektion hinzufügen. Hier verwenden wir eine robustere Abfragemethode, die die Abfrage vorbereitet und die Variablen einfügt:

$ query = $ conn-> prepare ('SELECT * FROM profile WHERE Benutzername =
: Benutzername LIMIT 1 ');
$ query-> bindParam (': Benutzername', 'knightofarcadia');
$ query-> execute ();
$ profile = $ query> fetch (PDO :: FETCH_ASSOC);
echo $ profile ['vollständiger Name'];

Der obige Code beschränkt die Profiltabellensuche auf nur ein Profil mit dem Benutzernamen Knightofarcadia . Wie in unserem ersten Beispiel wird danach einfach der vollständige Name ausgedruckt - aber Sie können sich durchaus vorstellen, eine gesamte XHTML-Seite aufzubauen, auf der die Daten übergeben werden.

Die PHP Data Objects-Bibliothek unterstützt die HipHop Engine von Facebook, mit der die CPU-Auslastung auf den Webservern um bis zu 50 Prozent reduziert werden kann

Die PHP Data Objects-Bibliothek unterstützt die HipHop Engine von Facebook, mit der die CPU-Auslastung auf den Webservern um bis zu 50 Prozent reduziert werden kann

Möglicherweise wird jedoch mehr als eine Zeile in unserer Abfrage zurückgegeben, und daher können wir die verwenden holen Methode als Iterator. Hier sehen wir eine andere Abfrage, die eine mehrzeilige Ergebnismenge zurückgibt:

$ query = $ conn-> prepare ('SELECT * FROM profile WHERE Heimatstadt =: Heimatstadt');
$ query-> bindParam (': Heimatstadt', 'Wessex');
$ query-> execute ();
foreach ($ query-> fetch (PDO :: FETCH_ASSOC) als $ row) {
echo $ row ['fullname'];
}}

Die obige Instanz durchsucht die Profildatenbank und gibt alle Profile mit dem zurück Heimatort einstellen Wessex . Das holen Die Methode wird dann verwendet, um alle diese Ergebnisse zurückzugeben, und für ein einfaches Beispiel können wir einfach den vollständigen Namen auf dem Bildschirm ausdrucken - obwohl dies eine komplexere XHTML-Seitenoperation sein könnte.

04. Erstellen

Obwohl ich die Erstellung einer Datenbankstruktur befürworten würde, die in SQL direkt im Datenbankverwaltungssystem ausgeführt wird, ist es jetzt möglich, Datenbanktabellen mithilfe von SQL, das von PDO vorbereitet wurde, dynamisch zu erstellen:

$ createql = $ conn-> prepare ('CREATE TABLE-Profile (Benutzername VARCHAR (64), vollständiger Name VARCHAR (128), Heimatstadt VARCHAR (128)');
$ conn-> query ($ createdql);

Bitte denken Sie daran, dass die Abfrage Das Objekt gibt in diesem Fall nichts Wertvolles zurück, da es sich um einen Erstellungsbefehl handelt. Wie bereits erwähnt, lohnt es sich, die Verwendung der dynamischen Erstellung von Tabellen auf diese Weise in einer Webanwendung zu vermeiden, obwohl ich mir vorstellen kann, dass sie in 'einmaligen' webbasierten Systemen (z. B. Installationsprogrammen für Server-Webanwendungen) verwendet wird sowie in einfachen nicht webbasierten Serverskripten.

Hier ist ein Objektmodell, das dem in diesem Lernprogramm verwendeten Beispiel-PHP-Code entspricht

wie man 3D-Text in Photoshop macht
Hier ist ein Objektmodell, das dem in diesem Lernprogramm verwendeten Beispiel-PHP-Code entspricht

05. Einfügen

Das Einfügen von Daten ist in einem dynamischen System sehr wichtig, insbesondere in modernen Web 2.0- und Web 3.0-Systemen, die auf Zusammenarbeit und Zusammenarbeit ausgerichtet sind. Wie können Benutzer zusammenarbeiten, wenn sie nicht in der Lage sind, Daten zu speichern und gemeinsam zu nutzen? Fügen wir daher einige Daten folgendermaßen in unsere Profiltabelle ein:

$ insertsql = 'INSERT INTO-Profile (Benutzername, vollständiger Name, Heimatstadt) VALUES (: Benutzername ,: vollständiger Name ,: Heimatstadt)';
$ query = $ conn-> prepare ($ insertsql);
$ query-> bindParam (': Benutzername', 'knightofarcadia');
$ query-> bindParam (': vollständiger Name', 'Arthur Pendragon');
$ query-> bindParam (': Heimatstadt', 'Wessex');
$ query-> execute ();

Wie Abfrage Funktion bei der Erstellung von Tabellen, diese ausführen Die Funktion gibt keinen Wert zurück, da es sich lediglich um einen Einfügebefehl in die Datenbank handelt. Sie werden auch feststellen, dass wir die Technik 'Vorbereiten, Binden und Ausführen' verwenden, um unsere Variablen in unser SQL einzufügen.

06. Aktualisierung

Aktualisierungen wie das Einfügen und Löschen sind in einem kollaborativen System von entscheidender Bedeutung, und PDO macht dies einfach. Das Aktualisieren ist dem Einfügen ziemlich ähnlich:

$ query = $ conn-> prepare ('UPDATE-Profile SET fullname =: fullname WHERE
Benutzername =: Benutzername ');
$ query-> bindParam (': vollständiger Name', 'Arthur Pendragoon');
$ query-> bindParam (': Benutzername', 'knightofarcadia');
$ query-> execute ();

Der obige Codeblock ersetzt lediglich den vollständigen Namen eines Benutzers. Sie werden jedoch feststellen, dass er praktisch mit dem Einfügecode identisch ist. Wir binden ein bedingtes Ergebnis, in diesem Fall den Benutzernamen, und wir binden ein Einstellungsergebnis, in diesem Beispiel den neuen vollständigen Namen.

Ein einfaches relationales Datenbankmodell einer normalisierten Viele-zu-Viele-Beziehung - ungefähr die Art von Struktur, die Doctrine aus einer ORM-Definition aufbaut

Ein einfaches relationales Datenbankmodell einer normalisierten Viele-zu-Viele-Beziehung - ungefähr die Art von Struktur, die Doctrine aus einer ORM-Definition aufbaut

07. Löschung

Lassen Sie uns zum Schluss einen kurzen Blick auf das Löschen werfen, was oft einfacher ist als das Einfügen oder Aktualisieren.

Wie viel kostet es, zur Kunstschule zu gehen?

$ query = $ conn-> prepare ('DELETE FROM profile WHERE' username '=
:Nutzername );
$ query-> bindParam (': Benutzername', 'knightofarcadia');
$ query-> execute ();

Die obige SQL löscht einfach ein Profil, in dem wir mit einem Benutzernamen übereinstimmen. Wir binden einfach den Benutzernamen an die bedingte Variable.

08. Datenbankverwaltungssystem wechseln

Vorausgesetzt, dass die Datenbanktabellenstruktur identisch ist und wir in einem proprietären SQL-System nichts Nicht-Standardisiertes verwenden, können wir unseren Datenquellennamen einfach so ändern, dass er von einem RDBMS verweist - in unserem ersten Beispiel Microsoft SQL Server -. zu einem anderen (z. B. IBM DB2). Der gesamte Code, den wir von da an erstellt haben, funktioniert - ohne dass SQL geändert werden muss.

Wir beginnen mit unserer Verbindungszeichenfolge, die folgendermaßen aussieht:

$ conn = neues PDO ('sqlsrv: server = localhost; database = yourdbname',
'Nutzername',
'Passwort');
$ conn = neues PDO ('ibm: DRIVER = {IBM DB2 ODBC-TREIBER}; DATABASE = yourd
bname; HOSTNAME = localhost; PORT = 56789; PROTOCOL = TCPIP; ',' Benutzername ',
'Passwort');

Ein weiterer Hauptnutzer der PDO-Bibliothek ist MediaWiki, die App, die alle Projekte der Wikipedia Foundation unterstützt

Ein weiterer Hauptnutzer der PDO-Bibliothek ist MediaWiki, die App, die alle Projekte der Wikipedia Foundation unterstützt

09. Transaktionen

Bei einer Transaktion in Bezug auf die Datenbank speichern Sie eine Reihe von Abfragen, um sie zu einem späteren Zeitpunkt stapelweise zu verarbeiten. PDO bietet einen Mechanismus zum Aufbau von Transaktionen. Da diese jedoch stark vom Datenbankverwaltungssystem abhängen, funktionieren PDO-Transaktionen nur, wenn eine Verbindung zu einer Teilmenge des von PDO unterstützten RDBMS hergestellt wird. Wenn Sie versuchen, eine Transaktion auf einem RDBMS zu starten, das keine Transaktionen unterstützt, erhalten Sie eine ziemlich unangenehme PDO-Transaktion. Analysieren wir also einen Transaktionscode:

Versuchen {
$ conn-> beginTransaction ();
$ insertsql = $ conn-> prepare ('INSERT INTO-Profile (Benutzername, vollständiger Name,
Heimatstadt) VALUES ('wilfred', 'Wilfred Jones', 'Scarborough') ');
$ deletesql = $ conn-> prepare ('DELETE FROM profile WHERE username =
'Nutzername'' );
$ conn-> exec ($ insertsql);
$ conn-> exec ($ deletesql);
$ conn-> commit ();
} catch (Ausnahme $ e) {
$ conn-> rollBack ();
// Nachricht zugänglich mit: $ e-> getMessage ();
}}

Zuerst beginnen wir mit einem Try-Catch, damit wir alle schlechten Ausnahmen abfangen können, einschließlich derer, die Sie möglicherweise durch den Versuch erhalten, eine Verbindung zu einem RDBMS herzustellen, das keine Transaktionsunterstützung bietet. Wir beginnen eine Transaktion mit $ conn-> beginTransaction () bevor Sie mit dem Aufbau unserer Abfrageausführungen fortfahren, diese werden jedoch erst in der Datenbank vollständig ausgeführt $ conn-> commit () Die Funktion wird ausgeführt und in einer effizienten seriellen Reihenfolge ausgeführt. Dies bedeutet, dass Sie zwischen den Ausführungsbefehlen verschiedene andere PHP-Prozesse ausführen können, ohne dass dies Auswirkungen auf die Datenbank hat.

Wenn wir feststellen, dass die Datenbank keine Transaktionen unterstützt, wird die Transaktion einfach nicht durchgeführt. Wenn eine andere Ausnahme ausgelöst wird, führen wir aus $ conn-> rollBack () , wodurch alle durch die Transaktion vorgenommenen Änderungen rückgängig gemacht werden. Es ist erwähnenswert, dass PDO beim Herstellen einer Verbindung zu einem von Transaktionen unterstützten RDBMS in den Status 'Auto-Commit' wechselt, in dem jeder Exec-Befehl selbst eine eigene festgeschriebene Transaktion ist. Wenn Sie jedoch sicher arbeiten möchten, können Sie immer verwenden beginTransaction und haben Zugriff auf das Batch-Commit und die Rollback-Funktionalität.

10. Probleme mit PDO

Aus PHP-Sicht gibt es keine wirklichen Probleme bei der Verwendung von PDO. Es ist objektorientiert, dh es ist erweiterbar und flexibel und funktioniert mit vielen Systemen auf verbindbare Weise. Das Problem tritt auf, wenn wir bedenken, dass die Mehrheit der relationalen Datenbankverwaltungssysteme der SQL-Standardisierung folgt (was uns beim Wechsel von einem System zum anderen hilft), viele Systeme jedoch über eine eigene proprietäre Syntax und Funktionen verfügen, die bei anderen Systemen nicht üblich sind.

Daher ist es wichtig, dass Sie für einen reibungslosen Übergang von einem System zu einem anderen den SQL-Standards folgen und nur häufig verwendete Funktionen verwenden. Um dies zu veranschaulichen, gibt es eine Funktion, die häufig in Abfragen verwendet wird: Wir können uns die Funktion für die Randomisierung in SQL ansehen. Hier sind die Funktionsspezifikationen für verschiedene Sprachen:

MySQL: SELECT RAND ([Startwert]);
MS SQL: SELECT RAND ([Startwert]);
PostgreSQL: SELECT RANDOM (); (Um den Startwert festzulegen, müssen Sie SETSEED ([Startwert]) ausführen.)
vorweg)
Oracle DB: SELECT dbms_random.random FROM dual;
SQLite: SELECT RANDOM ();

Wir müssen dies berücksichtigen und herausfinden, ob wir entweder eine standardisierte SQL-Technik anstelle der proprietären Funktion verwenden oder eine PHP-Prozedur verwenden und das Ergebnis in die SQL-Abfrage einfügen können (im Randomisierungsbeispiel könnten wir die verwenden Reihe() Funktion, die PHP bietet).

Die gedit-App unter Linux ist eine der schnellsten Methoden zum Ändern von Code und verfügt über eine Syntaxhervorhebung für viele Sprachen. Es verwendet das Doctrine ORM-System

Die gedit-App unter Linux ist eine der schnellsten Methoden zum Ändern von Code und verfügt über eine Syntaxhervorhebung für viele Sprachen. Es verwendet das Doctrine ORM-System

11. Objektrelationale Zuordnung anhand eines Beispiels

Natürlich können wir in der Abstraktion weiter gehen, indem wir in die Modellierungswelt eintreten - nein, nicht indem wir unser Projekt auf einem Laufsteg ausstellen, sondern indem wir einfache alte PHP-Objekte auf Datenbanktabellen abbilden. Es gibt ein Problem mit diesem Problem, da PHP-Objekte ein objektorientiertes Modell haben, während SQL-Datenbanken ein relationales haben. Hier kommt die objektrelationale Zuordnung (Object Relational Mapping, ORM) ins Spiel: Sie können Objekte Tabellen zuordnen, häufig mit etwas Magie und etwas Glanz.

Sie fragen sich wahrscheinlich, welchen Nutzen ORM hat. Ganz einfach, Sie müssen sich nicht mit der Datenbankkonnektivität oder SQL-Abfrage befassen. Sie verwenden einfach PHP-Objekte und ihre Methoden direkt, und das ORM-System übernimmt die gesamte Konnektivität und die Transaktionen zum Erstellen, Lesen, Aktualisieren und Löschen im Hintergrund. Es gibt einige ORM-Bibliotheken für PHP, PdoMap , Treiben und Rote Bohnen Ich bin ein paar der Guten, aber das Beste, was ich verwendet habe, ist Lehre 2 - Es hat den Vorteil, dass es entweder alleine oder als Teil eines MVC-Setups wie Symfony, CodeIgniter oder Zend verwendet werden kann.

Mit Doctrine 2 und einigen anderen ORM-Systemen definieren Sie normalerweise eine Reihe von Objekten und die Art der Beziehungen, die sie zueinander haben (z. B. Eins-zu-Viele; Viele-zu-Eins; Viele-zu-Viele). mit speziellen Details zum Zusammenhang zwischen Eigenschaften und Methoden. Natürlich müssen keine normalisierten Verknüpfungstabellen definiert werden, da diese im Objektmodell irrelevant sind. Dieser vom Menschen ausgeführte Prozess wird normalerweise mit benutzerdefinierter Syntax ausgeführt, beispielsweise in XML oder YAML, und Doctrine 2 ermöglicht objektrelationale Definitionen in PHP-Dokumentblöcken. Das folgende Modell und der folgende Code beschreiben ein Beispiel aus der Praxis.

Verwenden Sie Doctrine Common Collections ArrayCollection.
/ ** Beschreibung des Mitglieds
* @Entität
* /
Klassenmitglied {
/ **
* @Id @GeneratedValue
* @Column (type = 'integer')
* @war nicht
* /
geschützte $ id;
/ ** @Column (type = 'string')
* @var string
* /
geschützter $ Vorname;
/ ** @Column (type = 'string')
* @var string
* /
geschützter $ Nachname;
/ ** @Column (type = 'string')
* @var string
* /
geschützte $ email;
/ ** Viele Mitglieder haben eine Mitgliedschaft in vielen Gruppen
* @ManyToMany (targetEntity = 'Group')
* @var Group []
** /
geschützte $ Gruppen;
/ **
* Builder
* /
öffentliche Funktion __construct () {
$ this-> groups = new ArrayCollection ();
// ...
}}
// --- Grundlegende Beispiele für Getter und Setter --- //
/ ** Ruft die (interne) ID des Mitglieds ab
* @return int
* /
öffentliche Funktion getId () {
return $ this-> id;
}}
/ ** Ruft den Vornamen des Mitglieds ab
* @return string
* /
öffentliche Funktion getFirstname () {
$ this-> Vorname zurückgeben;
}}
/ ** Legt den Vornamen des Mitglieds fest
* @param string $ firstname
* /
öffentliche Funktion setFirstname ($ firstname) {
$ this-> Vorname = $ Vorname;
}}
// --- Komplexere Getter- und Setter-Beispiele --- //
/ ** Ruft das Gruppenarray des Mitglieds ab
* @return Group []
* /
öffentliche Funktion getGroups () {
$ this-> groups zurückgeben;
}}
/ ** Weist einem Mitglied eine Gruppe zu
* @param Group $ group
* /
öffentliche Funktion assignToGroup (Group $ group) {
$ this-> groups [] = $ group;
}}
/ ** Entfernt ein Mitglied aus einer Gruppe
* @param Group $ group
* /
öffentliche Funktion removeFromGroups (Group $ group) {
$ this-> getGroups () -> removeElement ($ group);
}}
// ...
}}
?>

Ein maschinell ausgeführter Prozess kann dann SQL generieren, um eine Datenbank zu erstellen (dies kann in einer Vielzahl von SQL-Syntaxen erfolgen, z. B. für MySQL, SQL Server oder PostgreSQL). Dies kann erreicht werden, indem SQL ausgegeben oder eine Verbindung mit der Datenbank hergestellt und selbst ausgeführt wird. Es werden die Viele-zu-Viele-Verknüpfungstabellen selbst erstellt.

Doktrin orm: Schema-Tool: erstellen

oder

doktrin orm: schema-tool: create --dump-sql

Sie werden feststellen, dass Sie jetzt die PHP-Objekte und die Tabellen eingerichtet haben. Jetzt können Sie mit den Objekten umgehen, ohne wissen zu müssen, wie eine Verbindung zum Datenbankverwaltungssystem hergestellt werden soll, oder die Struktur der relationalen Tabellen.

$ group = new Group ();
// Gruppendetails setzen, beibehalten und leeren (wie unten)
$ member = neues Mitglied ();
$ member-> setFirstname ('');
$ member-> setSurname ('');
$ member-> setEmail ('');
$ member-> assignToGroup ($ group);
$ entityManager-> persist ($ member);
$ entityManager-> flush ();
Echo 'Erstelltes Mitglied mit ID'. $ member-> getId (). ' n';

Natürlich steckt ein bisschen mehr dahinter als die obigen Codebeispiele, hauptsächlich in Bezug auf Verbindungsdetails und Bootstrapping, aber ich dachte, ich sollte Ihnen einen Eindruck von der Leistungsfähigkeit von ORM und Doctrine geben. Ich sollte hinzufügen, dass Doctrine 2 und einige der anderen PHP-ORM-Bibliotheken PDO verwenden, um Unterstützung für verschiedene RDBMS zu erhalten.

wie man ein Titelfoto auf Facebook versteckt

Nützlicherweise enthält das Doctrine-System eine umfassende integrierte Unterstützung, wann immer Sie diese benötigen

Nützlicherweise enthält das Doctrine-System eine umfassende integrierte Unterstützung, wann immer Sie diese benötigen

12. Schlussfolgerung

Ich habe PDO in kommerziellen Projekten verwendet und aus eigener Erfahrung erleichtert es dank seiner Objektorientierung die Verbindung zu einer Datenbank und den anschließenden Umgang mit den Daten erheblich. PDO muss nicht nur für die Systemumschaltung verwendet werden. Die Funktionen stehen Ihnen zur Verfügung, sind effizient und eignen sich ideal für zeitgemäße Programmiermuster.

Es gibt viele Systeme, die noch systemspezifische Funktionen im prozeduralen Stil verwenden, aber ich habe sicherlich eine Verlagerung des Fokus auf PDO gesehen. Wir können PDO auch in freier Wildbahn in Aktion sehen, da Drupal, MediaWiki, WordPress und viele andere beliebte Open-Source-Webanwendungen das PDO-System für die Verbindung mit Datenbanken jetzt ganz oder teilweise unterstützen. Ich habe eine Vision, in der Daten nicht mehr eng mit Datenbanken gekoppelt sind und Datenbanken nicht mehr eng mit Code gekoppelt sind, und wir sehen, dass allgemeinere Systeme für bestimmte Anwendungen konfiguriert werden. Ich denke, dass ORM-Systeme, NoSQL und verknüpfte Daten drei Dinge sind, auf die man in der Gegenwart und in der Zukunft achten muss. Die Killerfunktionen zukünftiger Webanwendungen werden zum einen die Grundlage für die Konnektivität von Daten und zum anderen für die Effizienz der Manipulation dieser Daten haben.

Entdecken Sie 101 CSS und Javascript Tutorials.

Daniel Lewis ist ein Web-App-Entwickler, Berater, Tutor und Redner.