TYPO3 - Datenbankabfragen in Extensions: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
Zeile 1: Zeile 1:
 +
== Über piBase ==
 +
Viel Arbeit nimmt einem der Zugriff über das piBase Objekt ab. Im Endeffekt greift es auf das Globale Datenbankobjekt zu (siehe unten) stellt aber schon einige Vordefinierte Funktjionien zur Verfügung. Beispielsweise muß man sich dann nicht mehr um Versteckte Datensätze, Start, Stop Zeiten etc. kümmern.
 +
 +
<pre>
 +
plugin.tx_gbcamps_pi1 {
 +
    #CMD =
 +
    pidList = 36
 +
    #pidSingle =
 +
    recursive = 1
 +
    #templateFile = EXT:gbcamps/res/template.html
 +
}
 +
</pre>
 +
 +
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.
 +
 +
 +
 +
=== Voraussetzung ===
 +
In der TypoScript Konfiguration sollten die Werte:
 +
== Über das Globale Datenbankobjekt ==
 
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.
 
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.
  

Version vom 28. Mai 2009, 12:18 Uhr

Über piBase

Viel Arbeit nimmt einem der Zugriff über das piBase Objekt ab. Im Endeffekt greift es auf das Globale Datenbankobjekt zu (siehe unten) stellt aber schon einige Vordefinierte Funktjionien zur Verfügung. Beispielsweise muß man sich dann nicht mehr um Versteckte Datensätze, Start, Stop Zeiten etc. kümmern.

plugin.tx_gbcamps_pi1 {
    #CMD =
    pidList = 36
    #pidSingle =
    recursive = 1
    #templateFile = EXT:gbcamps/res/template.html
}

Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.


Voraussetzung

In der TypoScript Konfiguration sollten die Werte:

Über das Globale Datenbankobjekt

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
));