php Logo

Paul Ferd. Siegert Datenbankgestützte Webseiten

 
Datenbankanbindung mit PHP

SQL
Die meisten Datenbanken verwenden zur Verwaltung und Abfrage der Datenbank eine standardisierte Abrfagesprache namens SQL (Structured Query Language).

MySQL ist eine dieser Datenbanken, die weitgehend den Standard ANSI SQL92 (Entry Level) bedient. Wie bei professionellen Datnebanken üblich ist MySQL zunächst erst einmal nur eine Datenbankengine, auf die verschiedene Frontends (grafische Darstellungen Datenbank und ihrer Inhalte) aufgesetzt werden können. Mit Hilfe des Frontends lässt sich die Datenbank dann verwalten und abfragen.

Hier ein paar Beispiele für MySQL-Frontends:
  • PHPMyAdmin (Frontend in PHP geschrieben und sehr beliebt)
  • CocoaMySQL (Mac)
  • MySQL-Front (Win)


Zusammenspiel von PHP und MySQL

Verbindungsaufbau mit der Datenbank

MySQL wird natürlich durch die Abfragesprache SQL abgefragt. In PHP existiert eine Bibliothek mit Kommandos, die es erlauben, SQL Befehle auszuführen. Bevor das aber möglich ist muß sich PHP zunächst
  • mit der Datenbankengine verbinden (1),
  • dann die Datenbank auswählen (2) und
  • kann dann den SQL-Befehl absetzen (3).


Drei Schritte zur MySQL-Abfrage:

$db = mysql_connect("xy.uni-lukiel:3306", „account“, „pw“);
mysql_select_db(„meineDatenbank“, $db);
$result = mysql_query($mysqlAbfrage,$db);


Dies muß zu Beginn jeder PHP-Seite geschehen, auf der auf die Datenbank zugegriffen werden soll. Wenn sich die Serverdaten ändern, würde das bedeuten, daß alle Seiten korrigiert werden müßten. Daher empfielt sich ein Auslagern der wichtigsten Variablen in eine Config-Datei, die dann in jede Seite eingebunden wird. Das Ändern in dieser Config-Datei hat dann Auswirkungen auf das gesamte Projekt.

Die Config-Datei:

$DbServer = "xy.uni-lukiel:3306"; # MySQL-Server
$DbServerPort = "3306"; # Port
$Db = "meineDatenbank"; # Datenbank
$DbServerUsername = "account"; # Benutzername
$DbServerPassword = "pw"; # Passwort

Das Einbinden der Config-Datei in jedes PHP-Dokument mit Datenbankabfrage würde dann lediglich so aussehen:

include("../inc/config.php");

Was ist PHP, was SQL?

Der PHP Teil der Abrage ist folgender:

$result = mysql_query($mysql,$db);

$mysql ist eine einfache Stringvariable. In diese Variable wird die SQL-Abfrage geschrieben:

$mysql = „select * from tabelle“;

Es ist auch die Einbettung von SQL Abfragen in den PHP-Code möglich:

$result = mysql_query(„select * from tabelle“,$db);

In vielen Frontends ist es möglich reine SQL-Abfragen (also nur „select * from tabelle“) einzugeben und ausführen zu lassen. Das ist manchmal hilfreich, um zu erfahren ob die SQL-Abfrage oder der PHP-Code einen Fehler verursacht.


Basisbefehle

SQL ist aber nicht nur eine Abfragesprache (Query Language), sondern auch eine Manipulationssprache (Data Manipulation Language, DML) zur Speicherung und Veränderung von Informationen und eine Beschreibungssprache (Data Description Language, DDL) zur Definition von Informationstrukturen. (Diemer 1985:18)

Also ist es möglich mit PHP ein vollständiges Frontend für MySQL zu entwickeln (wie PHPMyAdmin das tut).

Befehle für die Datenbank
CREATE DATABASE name
Dient zum Anlegen von Datenbanken.

DROP DATABASE [IF EXISTS] name
Löschen von Datenbanken

Befehle für die Tabelle
CREATE TABLE tname (feld typ [spez. Anweisungen],…)
Anlegen einer Tabelle
DROP TABLE [IF EXISTS] tname
Löschen einer Tabelle
ALTER TABLE tname CHANGE feldalt feldneu typ
ALTER TABLE tname ADD feld typ
Ändern von Tabellen

PRIMARY KEY (id)
Der Primärschlüssel dient zum Auffinden eines Datensatzes in einer Tabelle (id). Er muß

eindeutig sein
er muß kompakt sein, weil a) für ihn ein Index angelegt wird und b) er in anderen Tabellen als Verweis dient.

Daher ist es sinnvoll ihm eine fortlaufende Nummer zu geben:

create table tabellenname (
id INT NOT NULL AUTO_INCREMENT,
…,
PRIMARY KEY (id));


Unique

Wenn eine Spalte nur eindeutige Werte (unique) hat, kann der Index für diese Spalte schneller und efizienter angelegt werden. Ist ein Feld unique verhindert SQL das Einfügen eines Datensatzes, wenn der in diesem Feld keinen eindeutigen Wert hat!

Befehle für die Daten

Diese Abfragen werden naturgemäß am häufigsten benötgt:

Hinzufügen
INSERT INTO tname (feld1, feld2,…) VALUES (wert1, wert2,…)
neuer Datensatz
LOAD DATA INFILE ’pfadangabe’ INTO TABLE tname FIELDS TERMINATED BY ’trennzeichen’ (feld1, feld2,…)

Die mit auto_increment zuletzt erzeugte ID kann mit folgender Konstruktion schnell ermittelt werden:

$neu_id = mysql_insert_id();


Ändern
UPDATE tname SET feld1=wert1, feld2=wert2,… WHERE …
Feldänderung
REPLACE INTO tname (feld1, feld2,…) VALUES (wert1, wert2,…)
ersetzt einen Datensatz wenn der Schlüssel gleich ist, sonst wie INSERT

Löschen
DELETE FROM tname WHERE…
Datensatz löschen