unter.Strom.bz / 27 Beiträge / 11 Kommentare / blog feed / feed für kommentare

PHP MySQL klasse Tutorial für Anfänger

Da ich mich privat sowie beruflich viel mit der PHP-Programmierung im Zusammenspiel mit mySQL zur relationalen Datenhaltung beschäftige. Möchte ich hier mal ein paar Gedanken und Beispiele vorstellen, mit der man relativ einfach auf eine mySQL-Tabelle zugreifen kann.

Zunächst habe ich eine kleine mysql-Klasse geschrieben, die alle (für mich nützlichen) Funktionen in einer Klasse kapselt. Ich finde sowieso objektorientierte Programmierung (OOP) weitaus strukturierter als der, bei funktionaler Programmierung, entstandener Spagethi-code.  Seit PHP5 werden auch OOP-Konstrukte aus anderen Sprachen unterstützt, wie z. B. private oder public, um Methoden entsprechend einzuteilen. Ein wunderschönes Tutorial zu OOP in PHP5 gibt’s übrigens hier bei Peter Kropff.

Zurück zum Thema: Zunächst benötigen wir eine neue Datei “dbtest.php”:

<?php
include("mysql.class.php");

//Objekt aus mysql-Klasse instanziieren
$db = new mysql();

$name = "Egon";
$alter = 17;

//Neuen Eintrag in DB speichern
$sql = sprintf("INSERT INTO tabelle VALUES('%s',%d)", mysql_real_escape_string($name), $alter)
$db->query($sql);

//Alter aus DB wieder auslesen
$sql = sprintf("SELECT * FROM tabelle WHERE name='%s'", mysql_real_escape_string($name));
$db->query($sql);
$results = $db->fetch();

//Ausgabe: "Egon ist 17 Jahre alt."
foreach($results AS $result)
    echo $result['name']." ist ".$result['alter']." Jahre alt.";
?>

Der Quellcode sollte eigentlich selbst erklärend sein. Mithilfe des sprintf()-Befehls, lassen sich auch komplexe SQL-Queries schön strukturieren und man behält die Übersicht. Außerdem kann man durch die Verwendung von sprintf() in Zusammenhang mit mysql_real_escape_string die böswilligen SQL Injection Angriffe verhindern.

Den Quellcode für das Beispiel sowie die notwendige mySQL-Klasse gibt’s hier zum:
> Download der mysql-Klasse

Anmerkungen und Verbesserungsvorschläge könnt Ihr gern als Kommentare abgeben.

3 Kommentar

  1. Jules — September 26, 2010 #

    Guten Abend

    Danke für das Tutorial bin gerade am testen.

    Vielleicht hast Du mir ein Tipp wie ich anstelle der foreach eine while erstellen kann?

    while($data = mysql_fetch_array($result))
    {
    echo ”. $data[list_value] .”;
    echo “\n”;
    }

    Danke für deine Hilfe

    LG, Jules

  2. admin — September 26, 2010 #

    Hallo Jules,

    die foreach-Schleife ist ja nur dazu da, um das Ergebnis-Array zu durchlaufen und die Elemente auszugeben.

    In der mysql-Klasse wird in der fetch()-methode bereits mit while() gearbeitet, um die Datenbankergebnisse in ein Array zu schreiben:
    ….
    function fetch() {
    while ($row=@mysql_fetch_assoc($this->result))
    $rows[] = $row;
    return $rows;
    }

    Übrigens: Ob du While() oder Foreach() verwendest, ist eigentlich egal.

    Viele Grüße
    Andreas

  3. Jules — September 26, 2010 #

    Hallo Andreas

    Danke für deine Rückmeldung.
    Ich hab das leider noch nicht ganz verstanden.
    Wenn ich z.B. das so umsetze erhalte ich eine Fehlermeldung:

    include(”system/classes/mysql.class.php”);
    $db = new mysql();

    $sql = sprintf(”SELECT * FROM qp_cat ORDER BY sort_order”);

    $db->query($sql);
    $results = $db->fetch($sql);

    while($result = $results) {
    echo ”. $result['cat_value'] .”;
    echo “\n”;
    }

    Fehlermeldung:
    Notice: Undefined variable: rows in /Users/pfad/name/CMS/apanel/system/classes/mysql.class.php on line 54

    Was mach ich falsch?
    Viele Grüße
    Jules

Einen Kommentar hinterlassen