Ergebnis 1 bis 4 von 4

Thema: [Tutorial] Datenbank lesen/schreiben mit MySQLi

  1. #1
    König(in)
    Registriert seit
    03.07.2004
    Ort
    Rosenheim
    Beiträge
    1.024
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard [Tutorial] Datenbank lesen/schreiben mit MySQLi

    Einen wunderschönen Guten Abend.

    Hab ein bisschen zuviel Zeit, da hab ich mal rumgesucht und ma noch keine Tutorials oder ähnlichs zu MySQLi gefunden.
    Möchte ich mal ein kleines Tutorial machen, wie man mit MySQLi eine einfach Verbindung zur Datenbank aufbaut.

    Ich arbeite mit PHP5 und MySQL 4.1.7.
    MySQLi ist erst aber einer Version von 4.1 aufwärst verfügbar.
    Ich gehe von einem installierten Xampp aus, mit Host = localhost, user = root, passwort = keins und Db = php.

    Vorne weg, was passieren kann, wenn MySQLi nicht aktiviert ist kommt sowas wie "Fatal Error. Class MySQLi not found in...". Dann mal in die php.ini schauen bei den extensions noch die mysqli.dll eintragen: extension=php_mysqli.dll. Dann einmal den Apache neustarten und das Problem sollte erledigt sein.
    Wer Xampp benutzt sollte vorher mal in der phpinfo(); nachsehen wo die php.ini liegt, bei meiner xampp version gibts die php.ini 2mal, dann noch die php5.ini und die php4.ini, man kann da zwischen vers. 4 und 5 umschalten.

    Dann habe ich eine DB angelegt die php heißt und eine Tabelle mit 4 Feldern:
    Code:
    CREATE TABLE `trainings` (
      `id` int(11) NOT NULL auto_increment,
      `titel` varchar(100) NOT NULL default '',
      `trainer` varchar(100) NOT NULL default '',
      `dauer` int(11) NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ;
    Eine Tabelle für Trainingstitel + Trainer + der Dauer.

    Dazu gibt es dann auch ein Formular mit 3 Eingabfeldern, Titel, trainer und die Dauer. Die ID wird automatisch hoch gezählt:
    Code:
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    So, nun an die PHP Sachen .

    Zuerst das Eintragen. Dazu eine PHP Datei erstellen. Name ist egal, kann man logischerweise z. B. eintragen.php nennen. In die Datei zuerst das Formular legen, führ hier direkt in einer Datei das eintragen aus:
    dann sieht die ungefähr so aus:
    Code:
    <?php
      //hier kommt unsere verbindung hin
    ?>
    
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    So, nun erstmal eine überprüfung, nach Klick auf Eintragen!, ob auch alle Variablen richtig gesetzt sind und Werte enthalten:

    Code:
    <?php
    if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41; && isset&#40;$_POST&#91;'titel'&#93;&#41; && isset&#40;$_POST&#91;'trainer'&#93;&#41; && 
        isset&#40;$_POST&#91;'dauer'&#93;&#41; && $_POST&#91;'titel'&#93; != '' && $_POST&#91;'trainer'&#93; != '' &&
        &#40;int&#41;$_POST&#91;'dauer'&#93; > 0&#41; &#123;
             // MySQLi code gleich
    &#125;
    ?>
    
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    Bisher kann das Script noch nichts außer überprüfen des Formulars.

    Nun erstellen wir die Verbindung zur DB:
    Code:
    if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41; && isset&#40;$_POST&#91;'titel'&#93;&#41; && isset&#40;$_POST&#91;'trainer'&#93;&#41; && 
        isset&#40;$_POST&#91;'dauer'&#93;&#41; && $_POST&#91;'titel'&#93; != '' && $_POST&#91;'trainer'&#93; != '' &&
        &#40;int&#41;$_POST&#91;'dauer'&#93; > 0&#41; &#123;
      try &#123;
       $db = new MySQLi&#40;'localhost', 'root', '', 'php'&#41;; 
       // Neues MySQLi Objekt erstellen und verbindung aufbauen
       $sql = 'INSERT INTO trainings &#40;titel, trainer, dauer&#41; VALUES &#40; ?, ?, ?&#41;';
       // SQL Statetment mit 3 Platzhaltern
       $kommando = $db->prepare&#40;$sql&#41;;
       $kommando->bind_param&#40;'ssi', $_POST&#91;'titel'&#93;, $_POST&#91;'trainer'&#93;, $dauer&#41;;
       // parameter binden, ssi gibt die Datentypen der folgenden Wert an, String/String/Integer
       $dauer = &#40;int&#41;$_POST&#91;'dauer'&#93;;
       // dauer noch in Integer umwandeln
       $kommando->execute&#40;&#41;;
       // kommando &#40;sql&#41; ausführen, daten werden in die DB geschrieben
       // Ausgabe wieviel Zeilen betroffen sind&#58;
       //echo $kommando->affected_rows . ' Zeilen betroffen. 
    ';
       $db->close&#40;&#41;;
       // Db-Verbindung wird geschlossen   
       &#125; catch &#40;Exception $e&#41; &#123;
          echo 'Fehler&#58; ' . htmlspecialchars&#40;$e->getMessage&#40;&#41;&#41;;
       &#125;
    &#125;
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    Sooo, nun nach ausführen des Skripts mal einen Blick in PHPMyAdmin werfen und nachsehen ob Daten in der Tabelle stehen.
    Normalerweise sollte das funktionieren.
    So schwer war das doch garnicht .

    Es gibt noch eine zweite (einfacherer) Möglichkeit die Daten einzutragen, d.h. ohne Prepare:
    Nach Verbindung erstellung:


    Code:
        $sql = sprintf&#40;'INSERT INTO trainings &#40;titel, trainer, dauer&#41; VALUES &#40;\'%s\', \'%s\', %s&#41;',
           $db->real_escape_string&#40;$_POST&#91;'titel'&#93;&#41;,
           $db->real_escape_string&#40;$_POST&#91;'trainer'&#93;&#41;,
           &#40;int&#41;$_POST&#91;'dauer'&#93;
         &#41;;
        
        $db->query&#40;$sql&#41;;
        $db->close&#40;&#41;;
    Wobei ich die Prepare Variante persönlich besser finde, zwar etwas mehr schreibaufwand, aber man gewöhnt sich dran.

    So nun sind die Daten in der DB, wollen wir diese auch wieder rausholen.
    Ausgabe mache ich jetzt in eine ganz normale Tabelle.

    Leg nun eine neue Datei an, die du z. B. ausgabe.php nennst, und da kommt nun dieser Code rein:
    Code:
    <table>
    <tr><th>#</th><th>Thema</th><th>Trainer</th><th>Dauer</th></tr>
    <?php
      try &#123;
        $db = new MySQLi&#40;'localhost','root','','php'&#41;; 
        // DB wieder auswählen
        $sql = 'SELECT * FROM trainings';
        // Tabelle auswählen per SELECT
        $kommando = $db->prepare&#40;$db&#41;;
        // die Abfrage auswählen
        $kommando->execute&#40;&#41;;
        // Abfrage ausführen
        $kommando->bind_results&#40;$id, $titel, $trainer, $dauer&#41;;
        // die Ergebnisse sozusagen binden und 4 Variablen angeben für 4 Felder
        
        //Nun die Ausgabe mit einer While Schleife das sollte ja klar sein
        while &#40;$kommando->fetch&#40;&#41;&#41; &#123;
         printf&#40;'<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
              $id, htmlspecialchars&#40;$thema&#41;, htmlspecialchars&#40;$trainer&#41;, $dauer
            &#41;;
        &#125;
        $db->close&#40;&#41;;
        // Datenbankverbindung wieder schließen
     &#125; catch &#40;Exception $e&#41; &#123;
          echo 'Fehler&#58; ' . htmlsepcialchars&#40;$e->getMessage&#40;&#41;&#41;;
     &#125;
    ?>
    </table>
    So nun ist die Ausgabe da.

    Das kann man wiederrum auch anders gestalten, in etwa so:
    Code:
        $sql = 'SELECT * FROM trainings';
        $ergebnis = $db->query&#40;$sql&#41;; 
        while &#40;$zeile = $ergebnis->fetch_object&#40;&#41;&#41; &#123;
          printf&#40;'<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
            $zeile->id,
            htmlspecialchars&#40;$zeile->titel&#41;,
            htmlspecialchars&#40;$zeile->trainer&#41;,
            $zeile->dauer
          &#41;;
        &#125;
        $db->close&#40;&#41;;
    Wobei man sich da streiten kann welche Variante besser oder schlechter ist, kommt beides auf das selber raus .


    Nun ist es natürlich jedem selbst überlassen, ob man die Verbindung mit MySQLi oder mit MySQL aufbaut.
    Ich persönlich finde MySQLi die bessere Variante. Dazu auch die Reference ausm PHP Handbuch. Wie man sieht, jede Menge vordefinierte Funktionen.

    Dann wünsch ich mal jedem den das Interessiert viel Spaß mit dem Tutorial, hoffe nicht alles umsonst getippt zu haben ...

    Greetz

    Mülla
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiserliche Hoheit Avatar von No0ob
    Registriert seit
    02.01.2006
    Ort
    Nähe Frankfurt
    Beiträge
    1.500
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Das gehoert wohl eher ins Tutorial Forum..

  3. #3
    Morit2
    Gast

    Standard

    das ist aus Video2Brain :P
    Aber trotzdem nett!

  4. #4
    Youngster
    Registriert seit
    18.11.2006
    Ort
    Freital/Sachsen
    Beiträge
    10
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Re: [Tutorial] Datenbank lesen/schreiben mit MySQLi

    Zitat Zitat von Mülla
    Einen wunderschönen Guten Abend.

    Hab ein bisschen zuviel Zeit, da hab ich mal rumgesucht und ma noch keine Tutorials oder ähnlichs zu MySQLi gefunden.
    Möchte ich mal ein kleines Tutorial machen, wie man mit MySQLi eine einfach Verbindung zur Datenbank aufbaut.

    Ich arbeite mit PHP5 und MySQL 4.1.7.
    MySQLi ist erst aber einer Version von 4.1 aufwärst verfügbar.
    Ich gehe von einem installierten Xampp aus, mit Host = localhost, user = root, passwort = keins und Db = php.

    Vorne weg, was passieren kann, wenn MySQLi nicht aktiviert ist kommt sowas wie "Fatal Error. Class MySQLi not found in...". Dann mal in die php.ini schauen bei den extensions noch die mysqli.dll eintragen: extension=php_mysqli.dll. Dann einmal den Apache neustarten und das Problem sollte erledigt sein.
    Wer Xampp benutzt sollte vorher mal in der phpinfo(); nachsehen wo die php.ini liegt, bei meiner xampp version gibts die php.ini 2mal, dann noch die php5.ini und die php4.ini, man kann da zwischen vers. 4 und 5 umschalten.

    Dann habe ich eine DB angelegt die php heißt und eine Tabelle mit 4 Feldern:
    Code:
    CREATE TABLE `trainings` &#40;
      `id` int&#40;11&#41; NOT NULL auto_increment,
      `titel` varchar&#40;100&#41; NOT NULL default '',
      `trainer` varchar&#40;100&#41; NOT NULL default '',
      `dauer` int&#40;11&#41; NOT NULL default '0',
      PRIMARY KEY  &#40;`id`&#41;
    &#41; ;
    Eine Tabelle für Trainingstitel + Trainer + der Dauer.

    Dazu gibt es dann auch ein Formular mit 3 Eingabfeldern, Titel, trainer und die Dauer. Die ID wird automatisch hoch gezählt:
    Code:
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    So, nun an die PHP Sachen .

    Zuerst das Eintragen. Dazu eine PHP Datei erstellen. Name ist egal, kann man logischerweise z. B. eintragen.php nennen. In die Datei zuerst das Formular legen, führ hier direkt in einer Datei das eintragen aus:
    dann sieht die ungefähr so aus:
    Code:
    <?php
      //hier kommt unsere verbindung hin
    ?>
    
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    So, nun erstmal eine überprüfung, nach Klick auf Eintragen!, ob auch alle Variablen richtig gesetzt sind und Werte enthalten:

    Code:
    <?php
    if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41; && isset&#40;$_POST&#91;'titel'&#93;&#41; && isset&#40;$_POST&#91;'trainer'&#93;&#41; && 
        isset&#40;$_POST&#91;'dauer'&#93;&#41; && $_POST&#91;'titel'&#93; != '' && $_POST&#91;'trainer'&#93; != '' &&
        &#40;int&#41;$_POST&#91;'dauer'&#93; > 0&#41; &#123;
             // MySQLi code gleich
    &#125;
    ?>
    
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    Bisher kann das Script noch nichts außer überprüfen des Formulars.

    Nun erstellen wir die Verbindung zur DB:
    Code:
    if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41; && isset&#40;$_POST&#91;'titel'&#93;&#41; && isset&#40;$_POST&#91;'trainer'&#93;&#41; && 
        isset&#40;$_POST&#91;'dauer'&#93;&#41; && $_POST&#91;'titel'&#93; != '' && $_POST&#91;'trainer'&#93; != '' &&
        &#40;int&#41;$_POST&#91;'dauer'&#93; > 0&#41; &#123;
      try &#123;
       $db = new MySQLi&#40;'localhost', 'root', '', 'php'&#41;; 
       // Neues MySQLi Objekt erstellen und verbindung aufbauen
       $sql = 'INSERT INTO trainings &#40;titel, trainer, dauer&#41; VALUES &#40; ?, ?, ?&#41;';
       // SQL Statetment mit 3 Platzhaltern
       $kommando = $db->prepare&#40;$sql&#41;;
       $kommando->bind_param&#40;'ssi', $_POST&#91;'titel'&#93;, $_POST&#91;'trainer'&#93;, $dauer&#41;;
       // parameter binden, ssi gibt die Datentypen der folgenden Wert an, String/String/Integer
       $dauer = &#40;int&#41;$_POST&#91;'dauer'&#93;;
       // dauer noch in Integer umwandeln
       $kommando->execute&#40;&#41;;
       // kommando &#40;sql&#41; ausführen, daten werden in die DB geschrieben
       // Ausgabe wieviel Zeilen betroffen sind&#58;
       //echo $kommando->affected_rows . ' Zeilen betroffen. 
    ';
       $db->close&#40;&#41;;
       // Db-Verbindung wird geschlossen   
       &#125; catch &#40;Exception $e&#41; &#123;
          echo 'Fehler&#58; ' . htmlspecialchars&#40;$e->getMessage&#40;&#41;&#41;;
       &#125;
    &#125;
    <form action="<?php echo htmlspecialchars&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;; ?>" method="POST">
      Thema des Trainings&#58; <input type="text" name="titel" />
    
      Name des Trainers&#58; <input type="text" name="trainer" />
    
      Dauer des Trainings&#58; <input type="text" size="2" name="dauer" />
    
      <input type="submit" name="submit" value="Eintragen!" />
    </form>
    Sooo, nun nach ausführen des Skripts mal einen Blick in PHPMyAdmin werfen und nachsehen ob Daten in der Tabelle stehen.
    Normalerweise sollte das funktionieren.
    So schwer war das doch garnicht .

    Es gibt noch eine zweite (einfacherer) Möglichkeit die Daten einzutragen, d.h. ohne Prepare:
    Nach Verbindung erstellung:


    Code:
        $sql = sprintf&#40;'INSERT INTO trainings &#40;titel, trainer, dauer&#41; VALUES &#40;\'%s\', \'%s\', %s&#41;',
           $db->real_escape_string&#40;$_POST&#91;'titel'&#93;&#41;,
           $db->real_escape_string&#40;$_POST&#91;'trainer'&#93;&#41;,
           &#40;int&#41;$_POST&#91;'dauer'&#93;
         &#41;;
        
        $db->query&#40;$sql&#41;;
        $db->close&#40;&#41;;
    Wobei ich die Prepare Variante persönlich besser finde, zwar etwas mehr schreibaufwand, aber man gewöhnt sich dran.

    So nun sind die Daten in der DB, wollen wir diese auch wieder rausholen.
    Ausgabe mache ich jetzt in eine ganz normale Tabelle.

    Leg nun eine neue Datei an, die du z. B. ausgabe.php nennst, und da kommt nun dieser Code rein:
    Code:
    <table>
    <tr><th>#</th><th>Thema</th><th>Trainer</th><th>Dauer</th></tr>
    <?php
      try &#123;
        $db = new MySQLi&#40;'localhost','root','','php'&#41;; 
        // DB wieder auswählen
        $sql = 'SELECT * FROM trainings';
        // Tabelle auswählen per SELECT
        $kommando = $db->prepare&#40;$db&#41;;
        // die Abfrage auswählen
        $kommando->execute&#40;&#41;;
        // Abfrage ausführen
        $kommando->bind_results&#40;$id, $titel, $trainer, $dauer&#41;;
        // die Ergebnisse sozusagen binden und 4 Variablen angeben für 4 Felder
        
        //Nun die Ausgabe mit einer While Schleife das sollte ja klar sein
        while &#40;$kommando->fetch&#40;&#41;&#41; &#123;
         printf&#40;'<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
              $id, htmlspecialchars&#40;$thema&#41;, htmlspecialchars&#40;$trainer&#41;, $dauer
            &#41;;
        &#125;
        $db->close&#40;&#41;;
        // Datenbankverbindung wieder schließen
     &#125; catch &#40;Exception $e&#41; &#123;
          echo 'Fehler&#58; ' . htmlsepcialchars&#40;$e->getMessage&#40;&#41;&#41;;
     &#125;
    ?>
    </table>
    So nun ist die Ausgabe da.

    Das kann man wiederrum auch anders gestalten, in etwa so:
    Code:
        $sql = 'SELECT * FROM trainings';
        $ergebnis = $db->query&#40;$sql&#41;; 
        while &#40;$zeile = $ergebnis->fetch_object&#40;&#41;&#41; &#123;
          printf&#40;'<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
            $zeile->id,
            htmlspecialchars&#40;$zeile->titel&#41;,
            htmlspecialchars&#40;$zeile->trainer&#41;,
            $zeile->dauer
          &#41;;
        &#125;
        $db->close&#40;&#41;;
    Wobei man sich da streiten kann welche Variante besser oder schlechter ist, kommt beides auf das selber raus .


    Nun ist es natürlich jedem selbst überlassen, ob man die Verbindung mit MySQLi oder mit MySQL aufbaut.
    Ich persönlich finde MySQLi die bessere Variante. Dazu auch die Reference ausm PHP Handbuch. Wie man sieht, jede Menge vordefinierte Funktionen.

    Dann wünsch ich mal jedem den das Interessiert viel Spaß mit dem Tutorial, hoffe nicht alles umsonst getippt zu haben ...

    Greetz

    Mülla

    Sowas ist gut. Viele haben beim Erstellen von Scripten Probleme, wie ich:
    http://www.forum-hilfe.de/viewtopic.php?t=22508
    Herzliche Grüße
    aus Freital
    Wolfgang
    Danke im Voraus allen helfenden Usern!!

Ähnliche Themen

  1. Tutorial -> Daten in Datenbank eintragen + Auslesen
    Von sibbiiii im Forum Script-Archiv
    Antworten: 16
    Letzter Beitrag: 25.11.2009, 23:34
  2. Zufallszahl in Datenbank schreiben und Lesen
    Von mr.scruff im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 11
    Letzter Beitrag: 25.06.2007, 21:29
  3. Mitglieder daten aus datenbank lesen
    Von Xam im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 07.06.2007, 13:43
  4. Lesen und schreiben
    Von Abdul im Forum Off Topic und Quasselbox
    Antworten: 3
    Letzter Beitrag: 27.04.2005, 20:49
  5. PHP: In Datenbank schreiben und auslesen
    Von Fabian im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 09.01.2005, 16:22

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •