Programmieren mit php und mySQL (Zugriff auf die Datenbank) - Guru 2.0
Programmieren mit php und mySQL (Zugriff auf die Datenbank)

Programmieren mit php und mySQL (Zugriff auf die Datenbank)

Einfache theoretische Kenntnisse zu einer Datenbank hast Du bereits seit dem letzten Teil. Natürlich bist Du dadurch noch kein Datenbankdesigner. Und wie Oliver bemerkt hat, fehlen auch einige Teile. Diese werden wir wie immer nachholen, sobald sie uns berühren. Heute fangen wir mit dem grundlegenden Layout unserer Applikation an und gehen auch wieder ein wenig (mehr) in die Richtung PHP.

Layout der Applikation

Aufbau der Applikation

Aufbau der Applikation

Wie du siehst haben wir von der php-Seite zwei Programme – besser Dateien – zu erstellen. Die erste ist zuständig für die Verwaltung und Darstellung des Benutzerinterfaces und die zweite, die Include-Datei, kümmert sich um den gesamten Datenbankzugriff.

Für die Anlage der Include-Datei brauchen wir ein Unterverzeichnis mit dem Namen /inc, welches im Hauptverzeichnis liegen sollte.

Die Include-Datei

Erschrecke nicht, aber wir werden jetzt einige neue php-Befehle und Konzepte kennenlernen. Legen wir los, in dem Du deine Entwicklungsumgebung – ich verwende Eclipse [EN] mit den Plugins von Aptana/PHP, startest und das Verzeichnis /inc und dort eine Datei dBase.php anlegst. Diesmal teile ich den SourceCode der gesamten Datei auf mehrere Happen auf. Damit fällt es Dir sicher leichter ihn zu verstehen.

Konstanten definieren

Zuerst definieren wir vier Konstante. Diese nehmen die Werte für den Zugriff auf den Datenbankserver und die Datenbank auf. Konstante habe hier den Vorteil, dass sie so gut wie nie geändert werden müssen und wenn dann wurde die Datenbank oder der Server verändert. Als zweites sind Konstanten, wie wir ja im Teil 10 gelernt haben, global gültig. Dadurch müssen wir sie nicht in die einzelnen Funktionen importieren.

Die einzelnen Werte sind natürlich von Deinem Server abhängig. Der Hostname ist in den meisten Fällen – eigentlich immer – localhost. Denn die Applikation liegt normalerweise auf demselben Server wie die Datenbank. Hast Du im vorigen Teil die Vorgaben befolgt, kannst Du auch den Wert für _dbName übernehmen. Die Werte für _dbUser und _dbPass sind Standardwerte, wenn Du den mySQL-Server mit den Defaulteinstellungen lokal installiert hast. Ansonsten musst Du die Werte für den Superuser verwenden, welche Du bei der Installation angegeben hast.

Funktion zum Verbindungsaufbau

Zuerst hier die Funktion getConnection() als SourceCode der dBase.php. Die Erklärungen folgen danach. Es sind ja eine Menge neuer Befehle und Konzepte verbaut.

Diese Funktion bietet uns sozusagen die Grundlage für alle Zugriffe auf die Datenbank. Jedesmal wenn wir etwas von mySQL wissen wollen, werden wir auf diese Funktion zurückgreifen um einen Verbindung zur Datenbank herzustellen. Diese Funktion verwendet die zuvor definierten Konstanten und baut eine Verbindung zur Datenbank auf. Falls alles glatt geht, wird die Zugriffsmöglichkeit auf die Datenbank in der Variablen $connection gespeichert und zurückgegeben. Falls irgendwas schief läuft, wird eine Fehlermeldung mit den Befehl die() ausgegeben und die Applikation beendet. Es hat ja so oder so keinen Sinn weiterzuarbeiten, wenn wir die Datenbank nicht benützen können. Aber schau Dir den Ablauf der Funktion einmal im folgenden Bild an.

Ablauf der Verbindungsanforderung

Ablauf der Verbindungsanforderung

Das @ in php

Dies ist eigentlich nichts Besonderes! Sobald Du das @-Zeichen vor einen Befehl stellst, wird er “ruhig gestellt”. Das heißt egal was in der php.ini eingestellt ist, es werden bei einem Fehler nicht einmal Warnungen ausgegeben. Dies ist bei Anwendungen wichtig, welche mit dem Benutzer kommunizieren. Erstens kann der Benutzer mit einer Warnung oder Fehlermeldung nichts anfangen. Entweder versteht er sie nicht oder er kann den Fehler nicht beheben. Zweitens wollen wir ja keine “Schmutzwäsche” vor dem Anwender waschen. Wir geben ihm, über den internen Programmablauf, so wenig Informationen wie möglich. Denn je mehr er hat, desto leicht könnte er einen Hacking-Angriff starten.

Schauen wir uns jetzt mal die neuen Befehle an.

mysql_connect

Öffnet eine Verbindung zu einem mySQL-Server

Syntax

mysql_conntect ($server[, $user[, $passwort[, $newConnection[, $flags]]]]);

Parameter

  • $server
    Ein String mit dem Namen oder der IP-Adresse des Servers.
  • $user
    Ein String mit dem Namen des Benutzers.
  • $passwort
    Ein String mit dem Passwort des Benutzers $user im Klartext.
  • $newConnection
    Eine booleansche Variable, welche mit true eine weitere Verbindung aufbaut. Standardmäßig wird bei der Angabe derselben Zugriffswerte (Host, Benutzer und Passwort), immer die offene Verbindung verwendet. Der Standardwert für diesen Parameter ist false.
  • $flags
    Kann verschiedene Konstanten zur Steuerung der Verbindung enthalten. In unserem Fall ignorieren wir sie.

Rückgabewert

Bei Erfolg wird ein Identifier mit der Verbindung zurückgegeben. Bei einem Fehler wird false retour gegeben.

Beispiel

Diesen Befehl verwenden wir in der Zeile 34. Danach verknüpfst Du $connection mit der Datenbank in Zeile 36.

mysql_select_db

Wählt eine Datenbank auf dem mySQL-Server aus

Syntax

mysql_select_db ($datenBank[, $linkIdentifier]);

Parameter

  • $datenBank
    Ein String mit dem Namen der Datenbank.
  • $linkIdentifier
    Eine gültige Verbindung zum Datenbankserver. Wird sie nicht angegeben, wird die letzte Verbindung, welche mit mysql_connect() geöffnet wurde verwendet.

Rückgabewert

Bei Erfolg wird true, bei einem Fehler false retour gegeben.

Beispiel

Damit ist Deine Funktion für die Datenbankverbindung fertig. Natürlich hast Du die Fehlermeldungen eingebaut, denn wir wollen ja eine “saubere” Applikation haben. Nun kommt die Funktion zur Abfrage der Benutzerdaten.

Benutzerdaten abfragen

Auch hier stelle ich Dir gleich den Code zur Verfügung und werde in danach erklären.

In dieser Funktion ist wieder einiges Neues zu finden, aber die Grundlagen hast Du ja schon in den vorherigen Kursteilen gelernt. Interessant ist die Zeile 67, hier rufst Du getConnection() auf und speicherst die Verbindung in der Variablen $connection.

SQL-Abfrage

Du siehst in der Zeile 69 die string-Variable $sqlUser? Klar, aber was ist das für ein Text? Es ist nur ein ganz einfacher SQL-Befehl. Alle SQL-Befehle sind gleich aufgebaut. Zuerst sagst Du was Du machen willst, dann kommen die Felder, danach mit welcher Tabelle und zum Schluss irgendwelche Einschränkungen (wenn Du nicht alles in der Tabelle verarbeiten willst). Generell werden SQL-Befehle in Großbuchstaben geschrieben. Dies hat als einzigen tieferen Sinn, die bessere Unterscheidung zu den restlichen Teilen des Befehls. Bei den Feld- und Tabellennamen ist die Schreibweise dagegen wichtig. Achte darauf, dass Du sie gleich schreibst wie Du sie in phpMyAdmin definierst oder siehst.

Der SELECT-Befehl ist der einfachste von allen. Er weißt den Server an, Daten abzufragen. Danach kommen die Feldnamen. Wenn Du alle haben willst kannst Du als Wildcard (Platzhalter) den Stern (*) verwenden. Das spart einiges an Tipparbeit. Genauso gut könntest Du den Befehl aber so schreiben:

Nun kommt das Schlüsselwort FROM. Es sagt mySQL welche Tabelle es verwenden soll, in diesem Fall wollen wir alle Datenfelder von der Tabelle tblUser. Probier doch einmal den obigen Befehl mit phpMyAdmin aus. Aktiviere die Datenbank und dann mit einem Klick auf den Link tblUser in der blauen, linken Leiste die Tabelle. Danach klickst Du auf das Register SQL und fügst den Befehl ein. Mit OK bestätigst Du die SQL-Abfrage und siehst folgendes Ergebnis.

SELECT-Abfrage in phpMyAdmin

SELECT-Abfrage in phpMyAdmin

Siehst es bei Dir gleich aus? Super! Weil wir schon da sind, fügen wir gleich einen neuen Benutzer ein. Damit wir – zumindest am Anfang – gleich oder ähnliche Daten haben gebe ich Dir schnell den SQL-Befehl:

 

Nimm in im Moment einfach so hin, ich will Dich heute nicht überfordern und werde ihn einfach in einem späteren Teil des Kurses erklären. Wenn Du jetzt auf das Register Anzeigen klickst, solltest Du folgendes sehen:

Abfragen der Tabelle tblUser in phpMyAdmin

Abfragen der Tabelle tblUser in phpMyAdmin

Jetzt kommt der letzte Teil: WHERE. Mit diesem Befehl kannst Du deine Abfrage einschränken. In unserem Fall wollen wir ja nicht alle Datensätze wie Du sie oben abgefragt hast, sondern nur einen bestimmten. Daher kannst Du danach einen Feldnamen eingeben und verschieden Vergleiche (erinnere Dich an die Entscheidungen) durchführen. Damit kriegst Du ein paar Datensätze, einen oder vielleicht auch gar keinen von mySQL geliefert. Nun zum Befehl in der Zeile 71.

mysql_query

Sendet einen SQL-Befehl an den Datenbankserver

Syntax

mysql_query ($abfrage[, $linkIdentifier]);

Parameter

  • $abfrage
    Ein String mit einem gültigen SQL-Befehl. Normalerweise werden SQL-Abfragen mit einem Semikolon (;) abgeschloßen. Hier sollte es jedoch vermieden werden.
  • $linkIdentifier
    Eine gültige Verbindung zum Datenbankserver. Wird sie nicht angegeben, wird die letzte Verbindung, welche mit mysql_connect() geöffnet wurde verwendet.

Rückgabewert

  • Abfragen
    Bei “normalen” Abfragen wird ein Recordset bei Erfolg bzw. false bei einem Fehler zurück gegeben.
  • Aktionsabfragen
    Bei Abfragen welche Daten verändern wird bei Erfolg true, bei einem Fehler false retour gegeben.

Beispiel

Recordset

Was ist jetzt ein Recordset? Das wird ja immer kompliziert! Nimm diesen Begriff einfach als Konzept an. Es ist so zusagen eine virtuelle Tabelle. Eine Konstrukt welches folgendes behauptet: Lieber Programmierer, wenn Du jetzt Datensätze anforderst, werde ich sie Dir liefern. Also eigentlich ganz einfach, oder etwa nicht.

Nun brauchen wir nur noch den letzten Befehl in dieser Datei in Zeile 74.

mysql_fetch_array

Holt einen Datensatz vom SQL-Server ab und stellt ihn in einem Array zur Verfügung.

Syntax

mysql_query ($recordSet[, $type]);

Parameter

  • $recordSet
    Eine resource-Variable mit einem gültigen Recordset.
  • $type
    Eine Konstante, welche den Typ des Arrays festlegt
  • MYSQL_ASSOC
    Ein assoziatives Array. Der Index wird aus den Feldnamen gebildet.
  • MYSQL_NUM
    Ein nummerisches Array. Die Felder sind fortlaufend numeriert.
  • MYSQL_BOTH
    Ein assoziatives und gleichzeitig numerisches Array. Es werden “doppelt” so viele Felder wie vorhanden geliefert, da beide Indizies verwendet werden. Wird nichts angegeben, ist dies der Standardwert.

Rückgabewert

Ein Array mit den Feldinhalten

Beispiel

Damit haben wir die Datei dBase.php für heute geschafft.

Die Benutzerverwaltung

Natürlich haben wir keine komplett fertige Benutzerverwaltung, aber irgendwo müssen wir anfangen. Und das ist eine Datei user.php im Hauptverzeichnis unserer Applikation. Also dasselbe, welche das Verzeichnis /inc enthält. Den Anfang zeige ich Dir noch:

Den Rest darfst Du als Hausübung machen! Denn Du willst ja nicht aus der Übung kommen?

Übung 8.1

Das Ziel ist die Ausgabe des Datensatzes mit der ID=1.
Ein kleiner Tipp, spar dir eine for-Schleife für die Ausgabe der Datenfelder. Verwende einfach den Befehl print_r($array); in einer Zeile. Damit kannst Du schnell den Inhalt eines Arrays ausgeben.

In eigener Sache

Ich hoffe, dass meine Erklärungen verständlich waren. Ich bin gespannt wie viele mitmachen und auf die Lösung kommen. Ich werde es aber nur erfahren, wenn Du einen Kommentar eingibst. Also schreib ruhig, dass Du die Übungen machst und auch wie es Dir dabei geht. Der Kurs kann für Dich ein riesiger Erfolg werden, wenn Du mir eine Rückmeldung gibst. Denn dann kann ich die weiteren Artikel Deinen Wünschen anpassen.

Information

Diese Artikelserie ist mit dem Tag phpMySQL@Kurs versehen. Damit kannst Du schnell alle Teile des Kurses finden: https://www.guru-20.info/tag/phpMySQL@Kurs

Startseite bzw. Inhaltsverzeichnis des Kurses

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.