TYPO3 - Datenbankabfragen in Extensions

Aus Wikizone
Version vom 19. Juni 2007, 13:31 Uhr von 193.196.133.66 (Diskussion)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

DB-Abfragen in Typo3 auf eine MySQL Datenbank erfolgen über den Datenbank Abstraction Layer (DBAL,DAL). Erweiterungen ermöglichen eine Abfrage auch auf andere Datenbanken.

t3lib/class.t3lib_db.php

Die Instanz der Klasse steht im Front und Backend unter $GLOBALS['TYPO3_DB'] zur Verfügung. Der Aufruf erfolgt z.B. so:

$GLOBALS['TYPO3_DB']->sql_query(meineParameter);

Es sind auch komplexe Datenbankabfragen möglich z.B. eine Abfrage die über zwei Tabellen geht die über eine mm Verbindung verknüpft sind. Dies erfolgt mit dem Befehl:

$GLOBALS['TYPO3_DB']->exec_SELECT_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause=,$groupBy=,$orderBy=,$limit=)


Allgemein


exec_SELECTquery(
'...', # hier alle Felder
'tabelle1 a,tabelle2 b,tabelle3 c', #hier die Tabellen
'a.feld=b.uid and b.feld=c.uid ...', #die Zuordnung und sonstige wheres
'','','');

Beispiele

// SELECT:
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                '*',         // SELECT ...
                'mytable',     // FROM ...
                'uid=123 AND title LIKE "%blabla%"',    // WHERE...
                '',            // GROUP BY...
                'title',    // ORDER BY...
                '5,10'            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)
            );


// INSERT:
$insertArray = array(
    'pid' => 123,
    'title' => "My Title"
);
$res = $GLOBALS['TYPO3_DB']->exec_INSERTquery('mytable', $insertArray);


// UPDATE:
$updateArray = array(
    'title' => "My Title"
);
$res = $GLOBALS['TYPO3_DB']->exec_UPDATEquery('mytable', 'uid=123', $updateArray);


// DELETE
$res = $GLOBALS['TYPO3_DB']->exec_DELETEquery('mytable', 'uid=123');
$res=$GLOBALS['TYPO3_DB']->exec_SELECTquery(
  'COUNT(ap-status)',     //felder
  'aa_tagungen',              //from
  'id= '.$_GET[tid].'',         //where
  'ap-status',    //group
  '',         //order
  ''          //limit
);

$l = mysql_fetch_array($res);

Zum Debuggen kann man so den Query testen:

t3lib_div::debug($GLOBALS['TYPO3_DB']->SELECTquery(
  'COUNT(ap-status)',     //felder
  'aa_tagungen',              //from
  'id= '.$_GET[tid].'',         //where
  'ap-status',    //group
  '',         //order
  ''          //limit
));