Skip to content

PHP Data Objects

Linux
  • Ich habe mir letzten Winter PHP beigebracht, noch nicht auf Profilevel aber für einfache Webseiten reicht es schon 😉
    Damals habe ich mich bei der Datenbankabfrage für PHP Data Objects, in Kurzform PDO, entschieden. Warum? Daran kann ich mich nicht mehr 100% erinnern, aber ich denke ich fand den Ansatz gut eine Datenbankabfrage zu schreiben, wo es egal ist welche Datenbank im Hintergrund wirkt. Es wird dann noch der richtige Treiber für die Datenbank benötigt.

    PHP Data Objects oder kurz PDO stellt eine Abstraktionsebene für den Datenbankzugriff dar und ermöglicht einen einheitlichen Zugang von PHP auf unterschiedliche SQL-basierte Datenbanken, wie zum Beispiel MySQL, PostgreSQL oder SQLite.
    Quelle: https://de.wikipedia.org/wiki/PHP_Data_Objects

    Das PHP Handbuch zu PDO findet man hier.

    Wie Ihr wisst, benutze ich dieses Forum hauptsächlich als Notizbuch. Aber wie immer, sollte jemand fachliche Fehler finden, ich freue mich über jeden Hinweis und Tipp.

    Datenbank Aufruf

    Die Datenbank muss man aufrufen, damit man mit ihr arbeiten kann. Das macht man z.B. so. Das File soll hier den Namen db_connect.php haben.

    <?php
    try {
    $pdo = new PDO('mysql:host=localhost;dbname=DBNAME', 'Benutzer', 'Passwort');
    // set the PDO error mode to exception
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
    catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    ?>
    

    Dieser DB-Aufruf kommt in ein File außerhalb des Webseiten Ordners! Innerhalb des Projektes gibt es dann ein File, was folgendes enthält. Name db_connect.inc.php

    <?php
    //DB Connect
    require_once
    dirname($_SERVER['DOCUMENT_ROOT'])
    . DIRECTORY_SEPARATOR
    . '../ORDNER'
    . DIRECTORY_SEPARATOR
    . 'db_connect.php';
    ?>
    

    Innerhalb der einzelnen PHP-Files ruft man dann die Datenbank wie folgt auf.

    //DB Connect
    require __DIR__ . '/inc/db_connect.inc.php';
    

    Damit wäre der DB Aufruf ausreichend sicher. Nun kann man mit der DB arbeiten.

    Datenbank schließen

    So schließt man die Datenbankverbindung wieder

    $pdo = null;
    

    Beispiel um Daten aus der Datenbank abzurufen

    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $statement = $pdo->prepare("SELECT * FROM tabelle WHERE datum = :date ");
    $statement->execute(array('date' => $date));
    

    Wir wollen aus einer Tabelle Daten anzeigen. Auswahlkriterium soll das Datum sein, welches in $date abgelegt ist. Nun füllen wir eine Tabelle mit den Daten.

    $zahl = 1;
    <?php
    while($row = $statement->fetch()) 
    { 
       echo '<tr>
                <td>'.$zahl.'</td>
                <td>'.$row[datum].'</td>
                <td>'.$row[time].'</td>
            </tr>';
       $zahl = $zahl + 1;
    }
    ?>
    

    Wird fortgesetzt!

  • DB Eintrag speichern

    Nehmen wir an, wir möchten einen Datensatz in die DB schreiben.

    $statement = $pdo->prepare("INSERT INTO feinstaub(datum, time, sds_p1, sds_p2, temp, humidity) VALUES (?, ?, ?, ?, ?, ?)");
    $statement->execute(array(htmlspecialchars($datum),
    			  htmlspecialchars($time),
    			  htmlspecialchars($values["SDS_P1"]),
    			  htmlspecialchars($values["SDS_P2"]),
    			  htmlspecialchars($values["temperature"]),
    			  htmlspecialchars($values["humidity"])));
    

    Im Beispiel werden 6 Werte in die Datenbank feinstaub gechrieben.

  • Die ID des letzten geschriebenen Eintrages ermitteln

    $lastinsert_id = $pdo->lastInsertId();
    
  • Datensatz löschen

    Voraussetzung ist, das man die ID des zu löschenden Eintrages kennt.

    $statement = $pdo->prepare("DELETE FROM feinstaub WHERE id = ?");
    $statement->execute(array($id));
    if ($statement->execute()) {
      echo "Der DB-Eintrag wurde erfolgreich gelöscht!";
    }
    else {
      echo "Bitte den Administrator informieren!";
    }
    

  • php8.2 secutity update

    PHP
    1
    0 Stimmen
    1 Beiträge
    89 Aufrufe
    Niemand hat geantwortet
  • PHP - ChatGPT

    PHP
    1
    0 Stimmen
    1 Beiträge
    110 Aufrufe
    Niemand hat geantwortet
  • PHP Webseite lokal einhängen mit sshfs

    PHP
    1
    0 Stimmen
    1 Beiträge
    52 Aufrufe
    Niemand hat geantwortet
  • PHP Installation

    Angeheftet PHP
    3
    0 Stimmen
    3 Beiträge
    555 Aufrufe
    FrankMF

    Falls jemand auch die Warnung in Joomla! bezüglich der php Version 7.4 loswerden möchte, installiert kein php8.1. Damit habe ich eine dicke Fehlermeldung. Es müssen wohl sämtliche Erweiterungen und Templates 8.1 unterstützen, was wohl derzeit noch nicht der Fall ist. Nehmt 8.0, das läuft bei mir aktuell.

    apt install php8.0-common php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-xsl php8.0-zip apt install php8.0-cli php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-redis apt install php8.0-bcmath php8.0-gmp php8.0-imagick apt install php8.0-fpm
  • Yubikey als 2FA

    PHP
    3
    0 Stimmen
    3 Beiträge
    356 Aufrufe
    FrankMF

    Die ersten 12 Stellen eines Yubikeys sind immer gleich. Diese 12 Stellen speichern wir in einer Datenbank.

    $otp = substr ($otpKey, 0, 12);

    In der Datenbank speichern.

    //SQL $statement = $pdo->prepare("UPDATE users SET otpKey = :otpKey_neu WHERE id = :id"); $statement->execute(array('otpKey_neu' => $otp, 'id' => $userid)); //Überwachung auf Erfolg if ($statement->execute()) { // DB Eintrag erfolgreich geschrieben echo "YubiKey Passwort erfolgreich gespeichert!"; } else { echo "Datenbank Fehler! Bitte informieren Sie den Administrator."; }

    Ich hoffe, es hilft dem ein oder anderen sich mit diesem Thema etwas zu beschäftigen.

  • Wichtige Info

    Angeheftet PHP
    1
    0 Stimmen
    1 Beiträge
    214 Aufrufe
    Niemand hat geantwortet
  • Wichtige Links zum Coden

    PHP
    1
    0 Stimmen
    1 Beiträge
    384 Aufrufe
    Niemand hat geantwortet
  • Reload einer PHP Seite verhindern

    PHP
    1
    0 Stimmen
    1 Beiträge
    752 Aufrufe
    Niemand hat geantwortet