TYPO3 - Datenbankabfragen in Extensions: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 1: Zeile 1:
== Über piBase ==
+
== Datenbankabfrage ü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.
 
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.
  
Zeile 14: Zeile 14:
 
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.
 
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.
  
 +
Die Funktion zum Abfragen ist
 +
pi_exec_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='')
  
 
+
Interessant ist die Tatsache, das die Funktion auf die Parameter des Array $this->internal zugreifen kann, das Angaben über die aktuelle Position im Abfrageergebnis etc. enthält. So kann die Abfrage allein über den Tabellennamen als Parameter gestartet werden.
 
=== Voraussetzung ===
 
=== Voraussetzung ===
 
In der TypoScript Konfiguration sollten die Werte:
 
In der TypoScript Konfiguration sollten die Werte:
 +
 
== Über das Globale Datenbankobjekt ==
 
== Ü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:27 Uhr

Datenbankabfrage ü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.

Die Funktion zum Abfragen ist

pi_exec_query($table,$count=0,$addWhere=,$mm_cat=,$groupBy=,$orderBy=,$query=) 

Interessant ist die Tatsache, das die Funktion auf die Parameter des Array $this->internal zugreifen kann, das Angaben über die aktuelle Position im Abfrageergebnis etc. enthält. So kann die Abfrage allein über den Tabellennamen als Parameter gestartet werden.

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