MySQL Klasse

Aus php bar

Wechseln zu: Navigation, Suche

Die nachfolgenden Klassen, die im wesentlichen in TMySql und TMySqlResultSet enden, stellen einige Methoden zur Verfügung, mit der in einem Web-Projekt schnell und unkompliziert Datenbankabfragen ausgeführt werden können.

Die verschachtelte Struktur von Klassen und Interfaces dient dem modularen Aufbau; die Entstehung dieser Klassen basiert jedoch auf der Verwendung von MySQL, so dass für andere Datenbank-Server Anpassungen notwendig sein dürften.

Die Entwicklung der nachstehenden Klassen ist nicht abgeschlossen; Ergänzungen werden hier unregelmäßig erfolgen.

Die Klassen benötigen mindestens PHP 5.

Inhaltsverzeichnis

Klassen

 /**
  * @file
  * @brief Datenbanklayer
  * @author Hinrich Donner
  *
  * Dieser Quellcode ist urheberrechtlich geschützt. Er kann unter den Lizenzbedingungen der
  * GPL oder LGPL verwendet werden.
  */
 
10 /**
11  * @brief Basis-Exception für Datenbank-Anfragen
12  */
13 class EDatabase extends Exception
14 {
15 }

class EMySql extends EDatabase

 /**
  * @brief Basis-Exception für MySQL-Abfragen
  */
 class EMySql extends EDatabase
 {
     /**
      * @brief Konstruktor
      */
     function __construct()
10     {
11         $message = sprintf('%04d: %s', mysql_errno(), mysql_error());
12         parent::__construct($message, mysql_errno());
13     }
14 }

abstract class TDatabaseResultSet implements Iterator

 /**
  * @brief Ergebnismenge einer Datenbank-Abfrage
  */
 abstract class TDatabaseResultSet implements Iterator
 {
     /**
      * @brief Anzahl der Zeilen in der Ergebnismenge
      * @var int
      */
10     protected $_num_rows = 0;
11 
12     /**
13      * @brief Die Ergebnismenge
14      * @var array
15      */
16     protected $_rows = array();
17 
18     /**
19      * @brief Konstruktor
20      * @param resource $resource Datenbank-Resource
21      */
22     abstract function __construct($resource)
23 
24     /**
25      * @brief Das aktuelle Element (Iterator)
26      * @return array
27      */
28     public function current()
29     {
30         return current($this->_rows);
31     }
32 
33     /**
34      * @brief Das nächste Element (Iterator)
35      * @return array
36      */
37     public function next()
38     {
39         return next($this->_rows);
40     }
41 
42     /**
43      * @brief Der Index des aktuellen Elements (Iterator)
44      * @return array
45      */
46     public function key()
47     {
48         return key($this->_rows);
49     }
50 
51     /**
52      * @brief Das erste Element (Rücksetzen des Zeigers, Iterator)
53      * @return array
54      */
55     public function rewind()
56     {
57         return reset($this->_rows);
58     }
59 
60     /**
61      * @brief Prüfen des aktuellen Elements (Iterator)
62      * @return bool
63      */
64     public function valid()
65     {
66         return (bool) is_array($this->current());
67     }
68 }

class TMySqlResult extends TDatabaseResultSet implements Iterator

 /**
  * @brief Ergebnismenge einer MySQL-Abfrage
  */
 class TMySqlResult extends TDatabaseResultSet
 {
     /**
      * @brief Konstruktor
      * @param resource $resource MySQL-Ergebnis-Resource
      */
10     function __construct($resource)
11     {
12         while ($row = mysql_fetch_assoc($resource))
13         {
14             $this->_rows[] = $row;
15             ++ $this->_num_rows;
16         }
17     }
18 
19 }


interface IDatabase

 /**
  * @brief Abstrakte Interface-Definition
  */
 interface IDatabase
 {
     /**
      * @brief Datenbankverbindung aufbauen
      * @param string $host IP oder Domain des Servers
      * @param string $user Berechtigter Benutzer
10      * @param string $passwd Kennwort des Benutzers
11      */
12     public function connect($host, $user, $passwd);
13 
14     /**
15      * @brief Datenbankverbindung lösen
16      */
17     public function close();
18 
19     /**
20      * @brief Datenbank auswählen
21      * @param string $name Name der Datenbank
22      */
23     public function select($name);
24 
25     /**
26      * @brief Datenbankanweisung ausführen
27      * @param string $sql Die Anweisung an die Datenbank
28      * @return mixed
29      */
30     public function execute($sql);
31 
32     /**
33      * @brief Datenbankabfrage
34      * @param string $sql Die Anweisung
35      * @param int $offset Relativer Beginn der Ergebnismenge
36      * @param int $limit Maximale Anzahl der Zeilen in der Ergebnismenge
37      * @return TDatabaseResultSet
38      */
39     public function query($sql, $offset = 0, $limit = -1);
40 }

abstract class TDatabase implements IDatabase

 /**
  * @brief Abstrakte Basis des Datenbank-Layers
  */
 abstract class TDatabase implements IDatabase
 {
     /**
      * @brief Name der aktuellen Datenbank
      * @var string
      */
10     protected $database = '';
11 
12     /**
13      * @brief Datenbankhandle
14      * @var resource
15      */
16     protected $resource = false;
17 
18     /**
19      * @brief Container mit den ausgeführten Anweisungen
20      * @var array
21      */
22     protected $statements = array();
23 
24     /**
25      * @brief Erste Zeile einer Abfrage ermitteln
26      * @param string $sql Anweisung
27      * @param int $offset Relativer Offset
28      * @return TDatabaseResultSet
29      */
30     public function queryRow($sql, $offset = 0)
31     {
32         $dbr = $this->query($sql, $offset, 1);
33         $result = $dbr->current();
34         return $result;
35     }
36 
37     /**
38      * @brief Erste Zelle der ersten Zeile einer Abfrage
39      * @param string $sql Die Abfrage
40      * @return mixed Der Wert des Feldes
41      */
42     public function queryOne($sql)
43     {
44         $row = $this->queryRow($sql);
45         return reset($row);
46     }
47 }

class TMySql extends TDatabase

 /**
  * @brief MySQL-Layer
  */
 class TMySql extends TDatabase
 {
     /**
      * @brief Konstruktor
      * @param string $host IP oder Domain des Servers
      * @param string $name Der Name der Daenbank
10      * @param string $user Berechtigter Benutzer
11      * @param string $passwd Kennwort des Benutzers
12      */
13     function __construct($host, $name, $user, $passwd)
14     {
15         $this->connect($host, $user, $passwd);
16         $this->select($name);
17     }
18 
19     /**
20      * @breif Destruktor
21      */
22     function __destruct()
23     {
24         $this->close();
25     }
26 
27     /**
28      * @brief Datenbankverbindung aufbauen
29      * @param string $host IP oder Domain des Servers
30      * @param string $user Berechtigter Benutzer
31      * @param string $passwd Kennwort des Benutzers
32      */
33     public function connect($host, $user, $passwd)
34     {
35         $this->close();
36         $__er = error_reporting(E_ERROR);
37         if (!$this->resource = mysql_connect($host, $user, rawurlencode($passwd)))
38         {
39             error_reporting($__er);
40             throw new EMySql();
41         }
42         error_reporting($__er);
43     }
44 
45     /**
46      * @brief Datenbankverbindung lösen
47      */
48     public function close()
49     {
50         if (!$resource)
51             return;
52         mysql_close($this->resource);
53         $this->resource = false;
54     }
55 
56     /**
57      * @brief Datenbank auswählen
58      * @param string $name Name der Datenbank
59      */
60     public function select($name)
61     {
62         if (!mysql_select_db($name, $this->resource))
63             throw new EMySql();
64         $this->database = $name;
65     }
66 
67     /**
68      * @brief Datenbankanweisung ausführen
69      * @param string $sql Die Anweisung an die Datenbank
70      * @return mixed
71      */
72     public function execute($sql)
73     {
74         $this->statements[] = $sql;
75         if (!($result = mysql_unbuffered_query($sql, $this->resource)))
76             throw new EMySql();
77         return $result;
78     }
79 
80     /**
81      * @brief Datenbankabfrage
82      * @param string $sql Die Anweisung
83      * @param int $offset Relativer Beginn der Ergebnismenge
84      * @param int $limit Maximale Anzahl der Zeilen in der Ergebnismenge
85      * @return TDatabaseResultSet
86      */
87     public function query($sql, $offset = 0, $limit = -1)
88     {
89         if ($limit != -1)
90             $sql .= sprintf(' LIMIT %d, %d', $offset, $limit);
91         return new TMySqlResult($this->execute($sql));
92     }
93 }


Beispiel einer Verwendung:

1 $db     = new TMySql('localhost', 'mydb', 'root', 'geheim');
2 $sql    = "SELECT `name`, `telefon` FROM `telefonliste` ORDER BY `name` ASC";
3 $dbr    = $db->query($sql);
4 foreach ($dbr as $row)
5     echo "$row[name]: $row[telefon]<br>\n";
Persönliche Werkzeuge