Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  PHP & MySQL-Zugriffe
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet



 

Datenverwaltung




Sie sollten sich nun der Datenverwaltung zuwenden. Hierbei sind sämtliche Verarbeitungsprozesse wie Einfügen, Ändern, Löschen und Ausgeben von Datensätzen einer Datenbanktabelle gemeint. Die Verarbeitung erfolgt über die MySQL-Anweisungen INSERT, UPDATE, DELETE und SELECT.

Achtung: Im folgenden Abschnitt gehen wir davon aus, dass Sie die aus dem vorherigen Abschnitten die vorgestellte Datenbank samt Datenbanktabelle erzeugt haben.



INSERT – Datensätze einfügen

Die erzeugte Datenbanktabelle Mitglieder enthält noch keine Datensätze, die Sie bearbeiten könnten. Daher sollten Sie als erstes einen oder mehrerd Datensätze, je nach Bedarf, hinzufügen. Hierbei wird Ihnen die Funktion mysql_db_query(), die Sie bereits kennengelernt haben, behilflich sein.



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Inhalte festlegen
$SQL_Befehl = "
INSERT INTO Mitglieder (
    MitgliedID,
    MitgliedVorname,
    MitgliedNachname,
    Aufgabe,
    Geburtsdatum
) VALUES (
    '',
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
)"
;

// Datensatz hinzufügen
$resultat = mysql_db_query("verein", $SQL_Befehl);

if (
$resultat) {
    echo
"Datensatz erfolgreich hinzugefügt!";
} else {
    echo
"Datensatz konnte nicht hinzugefügt werden!";
}

mysql_close($db);

?>



Das Beispiel enthält sämtliche erforderlichen Prozesse. Sie sollten sich vor allem den SQL-Befehl genauer betrachten. Mit INSERT INTO bestimmen Sie die Tabelle, in die Sie den Datensatz hinzufügen wollen. Anschließend werden sämtliche benötigten Felder aufgelistet. Die Inhalte bzw. Werte der Felder sind im VALUES-Abschnitt anzugeben. Sie sollten hierbei vor allem auf die einfachen Anführungszeichen achten. Da der gesamte String in doppelte Anführungszeichen eingeschlossen ist, müssen Sie hier einfache Anführungszeichen verwenden.

Der SQL-Befehl kann im vorliegenden Fall etwas gekürzt werden, da Sie bereits während der Erzeugung der Tabelle festgelegt haben, dass das Feld MitgliedID ein Primärschlüsselfeld ist, das automatisch eine Wertveränderung erfährt. Die Variable $SQL_Befehl könnte somit wie folgt angepasst werden:



$SQL_Befehl = "
INSERT INTO Mitglieder (    
    MitgliedVorname,
    MitgliedNachname,
    Aufgabe,
    Geburtsdatum
) VALUES (    
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
)";



Sollten Sie bei der Übergabe der Felder die Reihenfolge einhalten, in der Sie die Datenbanktabelle angelegt haben, können Sie die Angabe sogar noch weiter anpassen:



$SQL_Befehl = "
INSERT INTO Mitglieder VALUES (
    '',
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
)";




Gleichzeitiges Speichern mehrerer Datensätze

MySQL unterstützt auch, abweichend vom SQL-Standard, das gleichzeitige Speichern mehrerer Datensätze in einer Zelle. Die Syntax lautet dann wie folgt:



// Mehrere Datensätze festlegen
SQL_Befehl = "
INSERT INTO Mitglieder (
    MitgliedID,
    MitgliedVorname,
    MitgliedNachname,
    Aufgabe,
    Geburtsdatum
) VALUES (
    '',
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
),(
    '',
    'Caroline',
    'Kannengiesser',
    'Leitung',
    '1979-01-04'
),(
    '',
    'Thomas',
    'Mustermann',
    'Mitglied',
    '1967-10-10'
)";



oder ohne Feldbezeichnungen:



// Mehrere Datensätze festlegen
$SQL_Befehl = "
INSERT INTO Mitglieder VALUES (
    '',
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
),(
    '',
    'Caroline',
    'Kannengiesser',
    'Leitung',
    '1979-01-04'
),(
    '',
    'Thomas',
    'Mustermann',
    'Mitglied',
    '1967-10-10'
)";




UPDATE – Datensätze bearbeiten

Zur Bearbeitung von Datensätzen wird die MySQL-Anweisung UPDATE verwendet. Diese Anweisung kann gleich mehrere Datensätze und Felder ändern und sollte daher sehr sorgfältig eingesetzt werden. Sie werden nun erfahren, wie sich die Bearbeitung von Datensätzen darstellt.



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Bearbeitung festlegen
$SQL_Befehl = "
UPDATE Mitglieder
SET Aufgabe = 'Chef'
WHERE MitgliedNachname = 'Kannengiesser'
"
;

// Datensatz Bearbeitung durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

if (
$resultat) {
    echo
"Anzahl geänderter Datensätze: " . mysql_affected_rows($db);
} else {
    echo
"Datensatz konnte nicht bearbeitet werden!";
}

mysql_close($db);

?>



Es werden sämtliche Datensätze bearbeitet, die im Feld MitgliedNachname Kannengiesser enthalten. Innerhalb des jeweiligen Datensatzes wird das Feld Aufgabe bearbeitet.

Natürlich können Sie auch ohne weiteres mehrere Felder gleichzeitig bearbeiten. Die einzelnen Änderungen werden durch Kommas getrennt.



// Datensatz-Bearbeitung festlegen
$SQL_Befehl = "
UPDATE Mitglieder
SET Aufgabe = 'Chef',
    MitgliedVorname = 'Matze',
WHERE MitgliedNachname = 'Kannengiesser'
";




DELETE – Datensätze löschen

Zum Löschen von Datensätzen wird die MySQL-Anweisung DELETE verwendet. Diese Anweisung kann ebenfalls gleich mehrere Datensätze und Felder löschen und sollte daher genau so sorgfältig wie die MySQL-Anweisung UDPATE eingesetzt werden. Sie werden nun erfahren, wie sich das Löschen von Datensätzen darstellt:



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Löschvorgang festlegen
$SQL_Befehl = "
DELETE FROM Mitglieder
WHERE MitgliedNachname = 'Kannengiesser' AND Geburtsdatum = '1974-11-20'
"
;

// Datensatz-Löschvorgang durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

if (
$resultat) {
    echo
"Anzahl gelöschter Datensätze: " . mysql_affected_rows($db);
} else {
    echo
"Datensatz konnte nicht gelöscht werden!";
}

mysql_close($db);

?>



An diesem Beispiel lässt sich zusätzlich erkennen, wie man den WHERE-Abschnitt des SQL-Befehls erweitern kann und somit den zu löschenden Datensatz genauer eingrenzen kann. Schließlich wäre es schade, wenn sämtliche Kannengiesser aus der Tabelle entfernt würden.


SELECT – Datensätze ausgeben

Es stehen Ihnen unzählige Möglichkeiten zur Verfügung, die Daten aus einer Datenbank abzufragen und auszugeben. Wir werden Ihnen jedoch lediglich einige ausgewählte Varianten vorstellen.



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Ausgabe festlegen
$SQL_Befehl = "SELECT * FROM Mitglieder";

// Datensatz-Ausgabe durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

echo
mysql_result($resultat, 0);          // 1
echo mysql_result($resultat, 0, 1);          // Matthias
echo mysql_result($resultat, 0, "Aufgabe"); // Leitung

mysql_close($db);

?>



Die MySQL-Anweisung liefert sämtliche Spalten und Zeilen der im FROM-Abschnitt bezeichneten Tabelle, also die komplette Tabelle. Die echo-Zeilen geben einzelne Feldinhalte aus. Die Funktion mysql_result() benötigt hierfür drei Argumente.


Einsatz von mysql_fetch_array()

Eine weitere Möglichkeit, Datensätze auszugeben, könnte sich wie folgt darstellen:



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Ausgabe festlegen
$SQL_Befehl = "SELECT * FROM Mitglieder";

// Sämtliche Datensatz-Ausgabe durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

while (
$row = mysql_fetch_array($resultat)) {
extract($row);
echo
"$MitgliedVorname $MitgliedNachname $Aufgabe<br>";
}

mysql_close($db);

?>



Die while-Schleife durchläuft mit Hilfe von mysql_fetch_array() sämtliche Datensätze, die durch SELECT geliefert wurden. Sie gibt die Feldinhalte in Form eines Arrays aus. Die PHP-Funktion extract() ermöglicht es Ihnen, mit Hilfe der Feldbezeichnungen auf die Fehldinhalte zuzugreifen und diese auszugeben. Die Ausgabe kann durch zusätzliche HTML-Strukturen optimiert werden.



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Ausgabe festlegen
$SQL_Befehl = "SELECT * FROM Mitglieder";

// Sämtliche Datensatz-Ausgabe durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

echo
"
<table border=1>
<tr>
    <td>Vorname</td>
    <td>Nachname</td>
    <td>Aufgabe</td>
</tr>
"
;

while (
$row = mysql_fetch_array($resultat)) {
extract($row);

echo
"
<tr>
    <td>$MitgliedVorname</td>
    <td>$MitgliedNachname</td>
    <td>$Aufgabe</td>
</tr>
"
;

}

echo
"</table>";

mysql_close($db);

?>




Einsatz von mysql_fetch_object()

Mit Hilfe der Funktion myslq_fetch_object() wird anstelle eines Arrays ein Objekt erzeugt. Auf die einzelnen Spalten kann über die Eigenschaften des Objekts zugegriffen werden. Diese erhalten ganz einfach die Feldnamen der Datenbanktabelle als Bezeichnungen zugewiesen. Für die Ausgabe ist dann die in PHP übliche Objekt-Syntax: Objekt->Eigenschaft zu verwenden.



<?php

// Verbindung zum MySQL-Server
$db = mysql_connect ("localhost", "matthias", "");

// Datensatz-Ausgabe festlegen
$SQL_Befehl = "SELECT * FROM Mitglieder";

// Sämtliche Datensatz-Ausgabe durchführen
$resultat = mysql_db_query("verein", $SQL_Befehl);

while (
$daten = mysql_fetch_object($resultat)) {
echo
"
    <p>
    $daten
->MitgliedID<br>
    $daten
->MitgliedVorname<br>
    $daten
->MitgliedNachname<br>
    $daten
->Aufgabe<br>
    $daten
->Geburtsdatum
    </p>
"
;
}

mysql_close($db);

?>



Der Unterschied zwischen mysql_fetch_array() und mysql_fetch_object() ist nur maginal. Die Performance ist bei beiden gleich. Sie haben somit die Qual-der-Wahl.


Zusätze für SELECT

Die SELECT-Syntax ist jedoch noch viel umfangreicher. So können die Felder für die Ausgabe auch durch arithmetische oder String-Operatoren erzeugt werden. Eine Abfrage kann sich über verschiedene Tabellen des gesamten relationalen Datenbankmodells erstrecken. Alternativ wird die Selektion mit Bedingungen verknüpft.

Hier eine Übersicht der SELECT-Befehle:

Element Beschreibung
SELECT Liste der Spalten, die ausgegeben werden sollen, einschließlich generierter Spalten.
FROM Liste der Tabellen, die abgefragt werden.
WHERE Suchbedingung zur Eingrenzung von Datensätzen. Über WHERE können auch verschiedene Tabellen verknüpft werden.
HAVING Analog zu einer Funktion wie WHERE, allerdings mit der Möglichkeit, Felder des eigenen SELECT miteinzubeziehen.
GROUP BY Angabe der Spalte, die zur Gruppierung von gleichartigen Datensätzen verwendet werden soll.
ORDER BY Legt die Ausgabereihenfolge der selektierten Datensätze fest.
LIMIT Beschränkung der Anzahl der auszugebenden Datensätze.


Um eine Ausgabe zu erhalten werden folgende Datensätze der Datenbanktabelle verein voraussgesetzt:



$SQL_Befehl = "
INSERT INTO Mitglieder VALUES (
    '',
    'Matthias',
    'Kannengiesser',
    'Leitung',
    '1974-11-20'
),(
    '',
    'Caroline',
    'Kannengiesser',
    'Leitung',
    '1979-01-04'
),(
    '',
    'Thomas',
    'Mustermann',
    'Mitglied',
    '1967-10-10'
)";




Beispiel - limit



<?php

$db
= mysql_connect ("localhost", "matthias", "");

$SQL_Befehl = "SELECT * FROM Mitglieder limit 2";

$resultat = mysql_db_query("verein", $SQL_Befehl);

while (
$daten = mysql_fetch_object($resultat)) {
echo
"
    <p>
    $daten
->MitgliedID<br>
    $daten
->MitgliedVorname<br>
    $daten
->MitgliedNachname<br>
    $daten
->Aufgabe<br>
    $daten
->Geburtsdatum
    </p>
"
;
}

mysql_close($db);

?>




Ausgabe



1
Matthias
Kannengiesser
Leitung
1974-11-20

2
Caroline
Kannengiesser
Leitung
1979-01-04




Beispiel – order by



<?php

$db
= mysql_connect ("localhost", "matthias", "");

$SQL_Befehl = "SELECT * FROM Mitglieder order by MitgliedVorname";

$resultat = mysql_db_query("verein", $SQL_Befehl);

while (
$daten = mysql_fetch_object($resultat)) {
echo
"
    <p>
    $daten
->MitgliedID<br>
    $daten
->MitgliedVorname<br>
    $daten
->MitgliedNachname<br>
    $daten
->Aufgabe<br>
    $daten
->Geburtsdatum
    </p>
"
;
}

mysql_close($db);

?>




Ausgabe



1
Caroline
Kannengiesser
Leitung
1979-01-04

2
Matthias
Kannengiesser
Leitung
1974-11-20

3
Thomas
Mustermann
Mitglied
1967-10-10




Beispiel - Kombination



<?php

$db
= mysql_connect ("localhost", "matthias", "");

$SQL_Befehl = "SELECT * FROM Mitglieder order by MitgliedVorname limit 2";

$resultat = mysql_db_query("verein", $SQL_Befehl);

while (
$daten = mysql_fetch_object($resultat)) {
echo
"
    <p>
    $daten
->MitgliedID<br>
    $daten
->MitgliedVorname<br>
    $daten
->MitgliedNachname<br>
    $daten
->Aufgabe<br>
    $daten
->Geburtsdatum
    </p>
"
;
}

mysql_close($db);

?>




Ausgabe



2
Caroline
Kannengiesser
Leitung
1979-01-04

1
Matthias
Kannengiesser
Leitung
1974-11-20




Hinweis: Teilweise gelten einige dieser Befehle auch für UPDATE, DELETE und INSERT.



 


Datenbanktabelle erstellen
 






© 2001-2005 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de