Marc Reichelt: Datenbankabfrage in Klasse

Beitrag lesen

Hallo Joe,

Wie kann ich jetzt mit den PHP-eigenen mysql-Funktionen herausfinden, ob es sich bei der Abfrage um ein SELECT, INSERT, ... handelt?
Oder ist meine einzige Möglichkeit über String-Funktionen den Abfragestring zu überprüfen?

Entweder machst du das, oder du gibt einfach einen weiteren Parameter an deine Funktion (z. B. einen Parameter $querytype, der eine bestimmte Konstante übergibt, die du natürlich vorher definierst). Das können dann durchaus Zeichenketten sein.
Das fände ich jedenfalls die sinnvollste Variante.

Das könnte dann beispielsweise so aussehen:

  
// benötigte Konstanten initialisieren  
define('MYSQL_QUERYTYPE_SELECT', 0);  
define('MYSQL_QUERYTYPE_INSERT', 1);  
  
/**  
 * Klasse zum speziellen Zugriff auf eine MySQL-Datenbank  
 */  
class Mysql {  
  
  /**  
   * Führt einen MySQL-Query aus und gibt eventuell vorhandene Resultate zurück  
   *  
   * @param   $query      Der auszuführende MySQL-Query  
   * @param   $querytype  Der Typ des MySQL-Querys - wird der Parameter nicht angegeben, wird ein SELECT-Query angenommen  
   * @return  Ergebnis des ausgeführten Querys bei Erfolg  
   */  
  function query($query, $querytype = MYSQL_QUERYTYPE_SELECT) {  
  
    switch ($querytype) {  
    case MYSQL_QUERYTYPE_SELECT:  
      /* Code einfügen */  
      break;  
    case MYSQL_QUERYTYPE_INSERT:  
      /* Code einfügen */  
      break;  
    }  
  
  }  
  
}

Aufgerufen werden könnte das Ganze dann beispielsweise so (ich gehe jetzt davon aus, dass die MySQL-Verbindung bereits steht und eine existierende Datenbank ausgewählt wurde - am sinnvollsten macht man dies übrigens im Konstruktor der Mysql-Klasse):

  
$mysql = new Mysql();  
$result = $mysql->query('SELECT id,name,message FROM guestbook');

Dies ist so möglich, weil als Standardwert ein SELECT angenommen wird.
Will man einen INSERT anwenden, so könnte der Aufruf so lauten:

  
$result = $mysql->query('INSERT ... INTO guestbook', MYSQL_QUERYTYPE_INSERT);

Alles klar? :)

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html