Einfache Objektorientierte PDO MySQL Verbindung

    • PHP

      Einfache Objektorientierte PDO MySQL Verbindung

      Moin!
      Habe für euch ein kleines Tutorial bzw. Script, mit dem ihr ganz schnell & objektorientiert eine einfache ODB MySQL-Connection erstellen könnt.

      Die Klasse für die ODB Connection:

      Quellcode

      1. odb.class.php

      PHP-Quellcode

      1. <?php
      2. class odb
      3. {
      4. /*** Class Object ***/
      5. private $oPDO = false;
      6. /*** Credentials ***/
      7. /*** Private, sonst könnte man sie ja auslesen :D ***/
      8. private $sPDOHost = 'localhost';
      9. private $sPDOUser = 'username';
      10. private $sPDOPass = 'password';
      11. private $sPDODB = 'database';
      12. /*** Main Constructor ***/
      13. function __construct()
      14. {
      15. try
      16. {
      17. $this->oPDO = new PDO('mysql:host=' . $this->sPDOHost . ';' .
      18. 'dbname=' . $this->sPDODB,
      19. $this->sPDOUser,
      20. $this->sPDOPass); /*** PDO Verbindung erzeugen ***/
      21. }
      22. catch (PDOException $oEx) /*** Error während des Vorganges ***/
      23. {
      24. die('MySQL/PDO Connection failed: <br /><pre>' . $oEx->getMessage() . "</pre>");
      25. return false; /*** Bei fehlerhafter initialisierung gibt die klasse false zurück ***/
      26. }
      27. }
      28. public function getInstance() /*** Funktion um die PDO Instanz als variale abzuspeichern ***/
      29. {
      30. if($this->oPDO != false)
      31. {
      32. return $this->oPDO; /*** Verbindung existiert und wird im return übergeben ***/
      33. }
      34. else
      35. {
      36. return false; /*** PDO wurde falsch initialisiert und es wird false zurückgegeben ***/
      37. }
      38. }
      39. }
      40. ?>


      Und so wird das ganze dann korrekt ausgeführt: :D

      Quellcode

      1. index.php

      PHP-Quellcode

      1. <?php
      2. /*** Class includen ***/
      3. require_once __DIR__ . '/odb.class.php';
      4. $hODB = false; /*** Später als Handle für die PDO Connection ***/
      5. /*** Objekt aufrufen und abfragen ***/
      6. if($oODB = new odb())
      7. {
      8. if($hODB = $oODB->getInstance())
      9. { /*** Alles funktioniert, die verbindung wird in die Handle-Variable gespeichert ***/
      10. }
      11. else
      12. {
      13. die("Unbekannter Fehler (Fehlendes PDO-Handle zur Verbindung)");
      14. }
      15. }
      16. else /*** Fehler ***/
      17. {
      18. /*** Fehler wurde per echo ausgegeben ***/
      19. exit();
      20. }
      21. /*** hier können jetz mysql abfragen gemacht werden ***/
      22. $oSQL = $hODB->prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :user AND `password` = :pass");
      23. $oSQL->execute(array(":user" => "tesusername", ":pass" => "testpassword"));
      24. $aReply = $oSQL->fetchAll();
      25. print_r($aReply);
      26. ?>


      Gleich gegen SQL Injection geschützt!
      Und wenn man weniger Error handling im Hauptscript benutzt, nur 2 Zeilen code.

      Viel Spaß damit! :D
      Siehe:
      pastebin.com/15ZJzVk3

      edit:
      Ich habe unter
      github.com/IntegralStudio/Conf…ww/core/databasetable.php
      eine Klasse (damals noch ohne Statements) geschrieben, sodass man folgenden Code verwenden kann:

      PHP-Quellcode

      1. $val = $this->HashPassword($pass);
      2. $hash = Util::GetRandomHash();
      3. $Adapter = new DatabaseTable('cw_users');
      4. $Adapter->username = $hash;
      5. $Adapter->password = $val[1];
      6. $Adapter->salt = $val[0];
      7. $Adapter->group = 'registered';
      8. $Adapter->customer_id = (int) $cust_id;
      9. $Adapter->offer_id =(int) $offer_id;
      10. $Adapter->owner_id = (int) $owner_id;
      11. $Adapter->state = 1;
      12. $Adapter->Apply();


      Sozusagen eine Mischung aus "activerecord" und "Row Data Gateway", die sich dynamisch für Tabellen erstellt. Darüber ein Tutorial mit PHP5-SQL-Statements zu schreiben wäre mal ein guter Auftrag für jemanden.
      Gesendet von meiner Schreibmaschine mittels Brieftaube.
      wieschoo.comBotSuite.NET

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „wieschoo“ ()

      Jetzt hast du mir aber immernoch nicht erklärt, wie ich meinen code korrigieren kann.

      Hatte ich doch geschrieben???


      Das "Problem" bei deinem Code ist, dass niemanden verboten wird einfach noch einmal den Konstruktor aufzurufen. So wie ich das sehe möchtest du ja das Singleton-Pattern umsetzen, oder? Dabei musst du auch die Methoden clone,wakeup,construct mit den richtigen Zugriffsspezifier. Desweiteren würde ich persönlich nie innerhalb der Klasse irgendwelche try-catch-Blöcke schreiben bei Datenverbindungen. Und wenn du es machst, dann bezweifle ich, dass du irgendein "return false;" bekommst sofern davor ein "die" steht. Warum sollte die Datenbank-Klasse als Fehler HTML-Code zurückgeben? Das gehört dort nicht hin.
      Gesendet von meiner Schreibmaschine mittels Brieftaube.
      wieschoo.comBotSuite.NET