PHP - Datenbanken

wwwdb.inf.tu.dresden.de

PHP - Datenbanken

FunktionsweiseFunktionsweise• Client fragt dynamische PHP-Seite via Internet an• Webserver reicht Anfrage an Interpreter weiter• Interpreter parst PHP-Skript• Ausgabe wird auf Basis des Skriptes erstellt• Skriptausgabe (meist HTML) wird zur Anzeige an den Client geliefertServerInternetClientInterpreter bekommtPHP-Quellcode underzeugt AusgabeW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 3


DB2 und PHPDB2 und PHPW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 7


DB2 Connectivity2 Möglichkeiten der PHP-Erweiterung• ibm_db2 (prozedurale API) hier verwendet• pdo_ibm (PHP Data Objects – objecktorientierte API)• Verfügbar in der PHP Extension Community Library (PECL)Lokales Verbinden• db2_connect($database, $user, $password);• db2_pconnect($database, $user, $password);Beispiel• $conn = db2_connect(„sample“, „db2insXX“, „“);if ($conn) {echo „connection succeeded“;db2_close($conn);} else {echo „connection failed“;}W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 8


Anfragen absetzenEinfache SQL-Anfragedb2_exec($connection, $statement, $options);Beispiel$conn = db2_connect(„sample“, „db2insXX“, „“);$sql = „SELECT * FROM EMPLOYEE“;$stmt = db2_exec($conn, $sql);Results verarbeitenwhile ($row = db2_fetch_object($stmt)) {print "Name: {$row->FIRSTNME} {$row->LASTNAME} ";}db2_close($conn);http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.swg.im.dbclient.php.doc/doc/t0023141.htmlW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 10


Ergebnisse verarbeitenVerschiedene Möglichkeiten• Abrufen von Ergebnisspalten• Abrufen von Ergebniszeilen• Abrufen von großen ObjektenErgebnisspalten• sinnvoll wenn nicht alle Spalten benötigt werden• verbraucht weniger Speicher• Abrufen durch:while (db2_fetch_row($stmt)) {$myVar = db2_result($stmt, 0);}$myVar2= db2_result($stmt, ‚spalte');W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 11


Ergebnisse verarbeitenErgebniszeilen• liefert alle Spalten einer Zeile• Format wählbar• db2_fetch_array(); Ausgabe als Array mit Index beginnend bei 0• db2_fetch_assoc(); Ausgabe als Array mit Spaltennamen als Index• db2_fetch_both(); Ausgabe als Array mit Spaltennamen und Index beginnend bei 0• db2_fetch_object(); Ausgabe als Objekt• Paramater: Statement-VariableBeispiel$sql = "SELECT firstnme, lastname FROM employee";$stmt = db2_exec($conn, $sql);while ($row = db2_fetch_object($stmt)) {print "Name: {$row->FIRSTNME} {$row->LASTNAME}";}Große Objekte• immer über db2_fetch_object(); abrufenW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 12


Dynamische AnfragenVorbereiten• db2_prepare($connection, $statement, $options);• db2_bind_param($statement, $index, $value)• Index / Parameternummern sind 1-basiert!!!Ausführen• db2_execute($statement)Parameter werden z.B. über Formulare geliefert$sql = "SELECT firstnme, lastname FROM employee WHEREbonus > ? AND bonus < ?";$stmt = db2_prepare($conn, $sql);if (!$stmt) { // Handle errors }Parameter einfügenVorbereitungdb2_execute($stmt, array(500, 1000));//process resultsParameter belegenAusführenW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 13


Stored ProceduresVorbereitung• db2_prepare($connection, $stmt, $options);• db2_bind_param($stmt, $index, $value, $param_type);Ausführen• db2_execute($stmt);Parametertypen:• DB2_PARAM_IN• DB2_PARAM_OUT• DB2_PARAM_INOUTBeispiel Parameterbindung:• db2_bind_param($stmt, 1, “myVar”, DB2_PARAM_IN);W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 14


Beispiel Stored Procedure$sql = "CALL GET_EMP_NAME(?,?)";$stmt = db2_prepare($conn, $sql);$first_param = "000010";$second_param = 0;db2_bind_param($stmt, 1, "first_param", DB2_PARAM_IN);db2_bind_param($stmt, 2, "second_param", DB2_PARAM_OUT);print "Values of bound parameters _before_ CALL:\n";print " 1: {$first_param} 2: {$second_param}\n\n";db2_execute($stmt);print "Values of bound parameters _after_ CALL:\n";print " 1: {$first_param} 2: {$second_param}\n\n";W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 15


TransaktionsverwaltungAutocommit nicht immer gewünscht• bestehende Verbindung ändern• Verbindung ohne Autocommit aufbauenVerbindung ändern• db2_autocommit($conn, DB2_AUTOCOMMIT_OFF)• db2_autocommit($conn, DB2_AUTOCOMMIT_ON)Verbindung ohne Autocommit aufbauen• Option-array bei db2_connect setzen• array("AUTOCOMMIT" => DB2_AUTOCOMMIT_OFF)Commit durchführen• db2_commit($conn);Rollback durchführen• db2_rollback($conn);W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 16


FehlerbehandlungConnection Errors• Treten bei fehlerhaften Verbindungen auf• db2_conn_error(); liefert den SQLSTATE• db2_conn_errormsg(); liefert Fehlernachricht• Ausgabe• echo db2_conn_error();SQL Errors• Treten bei fehlerhaften Statements auf (sowohl Deklaration als auch Ausführung)• db2_stmt_error(); liefert SQLSTATE• db2_stmt_errormsg(); liefert FehlernachrichtBeispiel für Deklarationsfehler$stmt = db2_prepare($connection, "DELETE FROM employeeWHERE firstnme = ?");if (!$stmt) {$this->state = db2_stmt_error();return false;}W. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 17


Ausführen der ScripteKommandozeile• php • Beispiel: php ~/php/dbtest.phpBeispielskripte• befinden sich in: dbprog/examples/08• in den eigene Homeordner kopieren• User + Passwort + Port anpassen• startenStored Procedure• falls die Stored Procedure nicht vorhanden, anlegen• Script: /home/dbprog/examples/08/sp.sqlW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 18


ÜbungBuildskript:• Ordner für PHP-Datei in eurem Verzeichnis anlegen• Kommandozeile: /home/dbprog/build/submit_php.sh • Ausgegebenen Pfad kopieren und in Browser einfügen• Mit beliebiger Taste wird der temporäre Ordner wieder gelöscht und die Seiten sindnicht mehr aufrufbarW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 19


ZertifizierungZertifizierung findet am 16.07.2013 statt• Ab ca. 9:00 Uhr im E042Angebotene Zertifikate• DB2 9 Family Fundamentals (730)• Application Development 9.7 (543)• Database Administrator 9.7 (541 nur für Nachholer)Übungen• Min. 70 Punkte in den vorangegangenen ÜbungenZusätzliche Vorlesung?• SQLJ am 02.07.13 und letzte Vorlesung am 09.07.13• Nicht mehr Teil der ZertifizierungW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 20


ZusammenfassungFunktionsweise von PHPSyntax von PHP• Einbinden von PHP in HTML• VariablenübergabeDB2 und PHP• Einfache Anfragen• Dynamische Anfragen• Ergebnisverarbeitung• Stored Procedures• Transaktionsverwaltung• FehlerbehandlungW. Lehner, T. Jäkel, T. Kiefer 8 DB2 und PHP | 21

Weitere Magazine dieses Users
Ähnliche Magazine