<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.235.237</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.235.237"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/94.216.235.237"/>
	<updated>2026-05-06T18:55:41Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18881</id>
		<title>TYPO3 - Datenbankabfragen in Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18881"/>
		<updated>2011-10-13T12:07:32Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alles wichtige zu TYPO3 Datenbankabfragen ==&lt;br /&gt;
Quelle z.T. http://www.typo3-lisardo.de/home/blog-post/2011/06/29/datenbankabfragen-in-extensions.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Datenbankabfragen sollten in Extensions nie über die normalen SQL-Befehle erfolgen. Gründe:&lt;br /&gt;
&lt;br /&gt;
    die globale Datenbank-Abstraktionsschicht DBAL wird eingbezogen; heisst, die Extension läuft automatisch auch mit anderen Datenbanken als MySQL&lt;br /&gt;
    die Verbindung zur Datenbank muss nicht eigens erstellt und beendet werden&lt;br /&gt;
    die INSERT-Queries führen automatisch ein FullQuote durch (die Mindest-Absicherung gegen SQL-Injection)&lt;br /&gt;
    die verfügbaren Befehle sind zum Teil einfach bequem …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funktionen aufrufen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klassen müssen nicht initialisiert werden, es reicht, sie über die GLOBALS aufzurufen:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery( .... ) &lt;br /&gt;
&lt;br /&gt;
=== Absicherung gegen SQL-Injection ===&lt;br /&gt;
&lt;br /&gt;
Alle Eingaben, die vom Besucher der Website kommen (also über GET oder POST) müssen vorher abgesichert werden. Das betrifft vor allem die Befehle zum Einfügen in die Datenbank, ausserdem aber auch die Übernahme von Benutzerdaten in die where-Abschnitte der SQL-Abfragen. Auch hier sollten die Typo3-Funktionen benutzt werden, damit die Quotierung für jede Datenbank passend erfolgt. Folgende Funktionen stehen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von Zeichenketten&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteStr($str,$table); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Zeichenkette, die quotiert werden soll&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von eindimensionalen Arrays:&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteArray($arr,$table,$noQuote=FALSE); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: eindimensionales oder assoziatives Array mit den Daten&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen. Nur bei assoziativen Datenarrays anwenden!&lt;br /&gt;
&lt;br /&gt;
    # kommaseparierte Listen zu Integerlisten umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntList($list) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: kommaseparierte Liste mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
    # Arraywerte zu Integer umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntArray($arr) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: Array mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Datenbankabfragen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Tabelle(n). Es gelten die üblichen SQL-Regeln für Aliase&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
    # INSERT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # UPDATE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $where,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    string: WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # DELETE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery($table,$where) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string Tabelle&lt;br /&gt;
    string WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spezielle Datenbank-Anweisungen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die folgende Funktion eignet sich hervorragend zum Auswerten einer n-n Datenverbindung, wie sie zum Beispiel bei der Verwendung von Kategorien anfällt. Bedingung ist allerdings, dass die Verbindung mit einer m_m-Tabelle erfolgt und nicht über ein einzelnes Feld mit kommaseparierter ID-Liste.&lt;br /&gt;
&lt;br /&gt;
    # SELECT relational&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          $select,&lt;br /&gt;
          $local_table,&lt;br /&gt;
          $mm_table,&lt;br /&gt;
          $foreign_table,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Name der lokalen Tabelle&lt;br /&gt;
    string: Name der Relationalen m_m-Tabelle&lt;br /&gt;
    string: Name der fremden, verknüpften Tabelle&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden. Es muss ein ‘ AND ‘ eingefügt werden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
Achtung: Viele Feldnamen in Typo3 sind identisch (uid, pid, hidden etc.). Das kann bei der Auswertung zu Problemen führen, da die Felder nicht eindeutig sind! Es ist deshalb sinnvoll, imm select- und für die Tabellennamen mit Aliasen zu arbeiten:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          &amp;#039;a.uid as a_uid, b.uid as b_uid&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_1 a&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_m_m&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_2 b&amp;#039;,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Ein ganz besondere Funktion ist listQuery(): Sie ermöglicht eine einfache Behandlung von relationalen Verknüpfungen, die nicht über eine dritte m_m-Tabelle laufen sondern über Felder mit kommaseparierten Listen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Die kommaseparierten Listen sind natürlich einem Datenbankfreak ein Grauß ;-) - ich würde davon abraten. Leider gibt es keine guten Möglichkeiten mit dem Kickstarter 1:n Verknüpfungen anzulegen.&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;listQuery  (&lt;br /&gt;
          $field,&lt;br /&gt;
          $value,&lt;br /&gt;
          $table&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Das Problem derartiger Verknüpfungen ist, dass die Abfrage über LIKE laufen muss, und dabei zusätzlich unterschieden werden muss, auf welcher Seite des gewünschten Wertes das Komma folgt. Kern der Funktion ist diese Zeile:&lt;br /&gt;
&lt;br /&gt;
    $where=&amp;#039;(&amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;\&amp;#039; OR &amp;#039;.$field.&amp;#039;=\&amp;#039;&amp;#039;.$command.&amp;#039;\&amp;#039;)&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Feldname, der die kommaseparierte Liste enthält&lt;br /&gt;
    string: Wert, der gefunden werden soll&lt;br /&gt;
    string: Tabelle, in der gesucht wird (für die korrekte Behandlung durch DBAL)&lt;br /&gt;
&lt;br /&gt;
In die gleiche Richtung geht die folgende Funktion, die Srings für die LIKE-Abfrage korrekt für DBAL umsetzt:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;escapeStrForLike($str,$table) &lt;br /&gt;
&lt;br /&gt;
WICHTIG: Es gibt eine hervorragende Abkürzung, um die wichtigen einschränkenden Felder in der WHERE-Abfrage automatisch einzuschließen: hidden, deleted, von/bis, Frontenduser etc. Die WHERE-Abrage muss einfach damit erweitert werden:&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel in der exec_SelectQuery:&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause.$this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;),&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Noch drei weitere Funktionen werden öfter gebraucht:&lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer zurück mit der Anzahl der betroffenen Datenzeilen, z. B. bei INSERT oder UPDATE&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_affected_rows( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, die uid des zuletzt eingefügten Datensatzes (über INSERT)&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_insert_id  ( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, mit der Anzahl der gefundenen Datensätze&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;t3lib_DB.sql_num_rows($res) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    pointer: Der Resultpointer einer vorher erfolgten SELECT-Abfrage.&lt;br /&gt;
&lt;br /&gt;
Weiterführende Links&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    Typo3 Dokumentation Darin suchen nach »t3lib_DB«.&lt;br /&gt;
    t3lib_DB Class Reference (Achtung: geht ausserhalb seines Framesets auf).&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage über piBase ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbcamps_pi1 {&lt;br /&gt;
    #CMD =&lt;br /&gt;
    pidList = 36&lt;br /&gt;
    #pidSingle =&lt;br /&gt;
    recursive = 1&lt;br /&gt;
    #templateFile = EXT:gbcamps/res/template.html&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.&lt;br /&gt;
&lt;br /&gt;
Die Funktion zum Abfragen ist&lt;br /&gt;
 pi_exec_query($table,$count=0,$addWhere=&amp;#039;&amp;#039;,$mm_cat=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$query=&amp;#039;&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Interessant ist die Tatsache, das die Funktion auf die Parameter des Array $this-&amp;gt;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.&lt;br /&gt;
=== Voraussetzung ===&lt;br /&gt;
In der TypoScript Konfiguration sollten die Werte:&lt;br /&gt;
&lt;br /&gt;
== Über das Globale Datenbankobjekt ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 t3lib/class.t3lib_db.php&lt;br /&gt;
Die Instanz der Klasse steht im Front und Backend unter $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;] zur Verfügung. Der Aufruf erfolgt z.B. so:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_query(meineParameter);&lt;br /&gt;
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:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$limit=&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitere Snippets ==&lt;br /&gt;
Kleines Sammelsurium&lt;br /&gt;
&lt;br /&gt;
 ($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debug_lastBuiltQuery,&amp;quot;Last SQL&amp;quot;);&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18880</id>
		<title>TYPO3 - Datenbankabfragen in Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18880"/>
		<updated>2011-10-13T10:48:12Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: /* Alles wichtige zu TYPO3 Datenbankabfragen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alles wichtige zu TYPO3 Datenbankabfragen ==&lt;br /&gt;
Quelle z.T. http://www.typo3-lisardo.de/home/blog-post/2011/06/29/datenbankabfragen-in-extensions.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Datenbankabfragen sollten in Extensions nie über die normalen SQL-Befehle erfolgen. Gründe:&lt;br /&gt;
&lt;br /&gt;
    die globale Datenbank-Abstraktionsschicht DBAL wird eingbezogen; heisst, die Extension läuft automatisch auch mit anderen Datenbanken als MySQL&lt;br /&gt;
    die Verbindung zur Datenbank muss nicht eigens erstellt und beendet werden&lt;br /&gt;
    die INSERT-Queries führen automatisch ein FullQuote durch (die Mindest-Absicherung gegen SQL-Injection)&lt;br /&gt;
    die verfügbaren Befehle sind zum Teil einfach bequem …&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funktionen aufrufen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klassen müssen nicht initialisiert werden, es reicht, sie über die GLOBALS aufzurufen:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery( .... ) &lt;br /&gt;
&lt;br /&gt;
=== Absicherung gegen SQL-Injection ===&lt;br /&gt;
&lt;br /&gt;
Alle Eingaben, die vom Besucher der Website kommen (also über GET oder POST) müssen vorher abgesichert werden. Das betrifft vor allem die Befehle zum Einfügen in die Datenbank, ausserdem aber auch die Übernahme von Benutzerdaten in die where-Abschnitte der SQL-Abfragen. Auch hier sollten die Typo3-Funktionen benutzt werden, damit die Quotierung für jede Datenbank passend erfolgt. Folgende Funktionen stehen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von Zeichenketten&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteStr($str,$table); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Zeichenkette, die quotiert werden soll&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von eindimensionalen Arrays:&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteArray($arr,$table,$noQuote=FALSE); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: eindimensionales oder assoziatives Array mit den Daten&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen. Nur bei assoziativen Datenarrays anwenden!&lt;br /&gt;
&lt;br /&gt;
    # kommaseparierte Listen zu Integerlisten umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntList($list) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: kommaseparierte Liste mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
    # Arraywerte zu Integer umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntArray($arr) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: Array mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Datenbankabfragen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Tabelle(n). Es gelten die üblichen SQL-Regeln für Aliase&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
    # INSERT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # UPDATE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $where,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    string: WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # DELETE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery($table,$where) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string Tabelle&lt;br /&gt;
    string WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spezielle Datenbank-Anweisungen ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die folgende Funktion eignet sich hervorragend zum Auswerten einer n-n Datenverbindung, wie sie zum Beispiel bei der Verwendung von Kategorien anfällt. Bedingung ist allerdings, dass die Verbindung mit einer m_m-Tabelle erfolgt und nicht über ein einzelnes Feld mit kommaseparierter ID-Liste.&lt;br /&gt;
&lt;br /&gt;
    # SELECT relational&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          $select,&lt;br /&gt;
          $local_table,&lt;br /&gt;
          $mm_table,&lt;br /&gt;
          $foreign_table,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Name der lokalen Tabelle&lt;br /&gt;
    string: Name der Relationalen m_m-Tabelle&lt;br /&gt;
    string: Name der fremden, verknüpften Tabelle&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden. Es muss ein ‘ AND ‘ eingefügt werden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
Achtung: Viele Feldnamen in Typo3 sind identisch (uid, pid, hidden etc.). Das kann bei der Auswertung zu Problemen führen, da die Felder nicht eindeutig sind! Es ist deshalb sinnvoll, imm select- und für die Tabellennamen mit Aliasen zu arbeiten:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          &amp;#039;a.uid as a_uid, b.uid as b_uid&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_1 a&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_m_m&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_2 b&amp;#039;,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Ein ganz besondere Funktion ist listQuery(): Sie ermöglicht eine einfache Behandlung von relationalen Verknüpfungen, die nicht über eine dritte m_m-Tabelle laufen sondern über Felder mit kommaseparierten Listen.&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Die kommaseparierten Listen sind natürlich einem Datenbankfreak ein Grauß ;-) - ich würde davon abraten. Leider gibt es keine guten Möglichkeiten mit dem Kickstarter 1:n Verknüpfungen anzulegen.&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;listQuery  (&lt;br /&gt;
          $field,&lt;br /&gt;
          $value,&lt;br /&gt;
          $table&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Das Problem derartiger Verknüpfungen ist, dass die Abfrage über LIKE laufen muss, und dabei zusätzlich unterschieden werden muss, auf welcher Seite des gewünschten Wertes das Komma folgt. Kern der Funktion ist diese Zeile:&lt;br /&gt;
&lt;br /&gt;
    $where=&amp;#039;(&amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;\&amp;#039; OR &amp;#039;.$field.&amp;#039;=\&amp;#039;&amp;#039;.$command.&amp;#039;\&amp;#039;)&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Feldname, der die kommaseparierte Liste enthält&lt;br /&gt;
    string: Wert, der gefunden werden soll&lt;br /&gt;
    string: Tabelle, in der gesucht wird (für die korrekte Behandlung durch DBAL)&lt;br /&gt;
&lt;br /&gt;
In die gleiche Richtung geht die folgende Funktion, die Srings für die LIKE-Abfrage korrekt für DBAL umsetzt:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;escapeStrForLike($str,$table) &lt;br /&gt;
&lt;br /&gt;
WICHTIG: Es gibt eine hervorragende Abkürzung, um die wichtigen einschränkenden Felder in der WHERE-Abfrage automatisch einzuschließen: hidden, deleted, von/bis, Frontenduser etc. Die WHERE-Abrage muss einfach damit erweitert werden:&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel in der exec_SelectQuery:&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause.$this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;),&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Noch drei weitere Funktionen werden öfter gebraucht:&lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer zurück mit der Anzahl der betroffenen Datenzeilen, z. B. bei INSERT oder UPDATE&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_affected_rows( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, die uid des zuletzt eingefügten Datensatzes (über INSERT)&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_insert_id  ( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, mit der Anzahl der gefundenen Datensätze&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;t3lib_DB.sql_num_rows($res) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    pointer: Der Resultpointer einer vorher erfolgten SELECT-Abfrage.&lt;br /&gt;
&lt;br /&gt;
Weiterführende Links&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    Typo3 Dokumentation Darin suchen nach »t3lib_DB«.&lt;br /&gt;
    t3lib_DB Class Reference (Achtung: geht ausserhalb seines Framesets auf).&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage über piBase ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbcamps_pi1 {&lt;br /&gt;
    #CMD =&lt;br /&gt;
    pidList = 36&lt;br /&gt;
    #pidSingle =&lt;br /&gt;
    recursive = 1&lt;br /&gt;
    #templateFile = EXT:gbcamps/res/template.html&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.&lt;br /&gt;
&lt;br /&gt;
Die Funktion zum Abfragen ist&lt;br /&gt;
 pi_exec_query($table,$count=0,$addWhere=&amp;#039;&amp;#039;,$mm_cat=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$query=&amp;#039;&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Interessant ist die Tatsache, das die Funktion auf die Parameter des Array $this-&amp;gt;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.&lt;br /&gt;
=== Voraussetzung ===&lt;br /&gt;
In der TypoScript Konfiguration sollten die Werte:&lt;br /&gt;
&lt;br /&gt;
== Über das Globale Datenbankobjekt ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 t3lib/class.t3lib_db.php&lt;br /&gt;
Die Instanz der Klasse steht im Front und Backend unter $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;] zur Verfügung. Der Aufruf erfolgt z.B. so:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_query(meineParameter);&lt;br /&gt;
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:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$limit=&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18879</id>
		<title>TYPO3 - Datenbankabfragen in Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Datenbankabfragen_in_Extensions&amp;diff=18879"/>
		<updated>2011-10-13T10:44:10Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Alles wichtige zu TYPO3 Datenbankabfragen ==&lt;br /&gt;
Quelle z.T. http://www.typo3-lisardo.de/home/blog-post/2011/06/29/datenbankabfragen-in-extensions.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Datenbankabfragen sollten in Extensions nie über die normalen SQL-Befehle erfolgen. Gründe:&lt;br /&gt;
&lt;br /&gt;
    die globale Datenbank-Abstraktionsschicht DBAL wird eingbezogen; heisst, die Extension läuft automatisch auch mit anderen Datenbanken als MySQL&lt;br /&gt;
    die Verbindung zur Datenbank muss nicht eigens erstellt und beendet werden&lt;br /&gt;
    die INSERT-Queries führen automatisch ein FullQuote durch (die Mindest-Absicherung gegen SQL-Injection)&lt;br /&gt;
    die verfügbaren Befehle sind zum Teil einfach bequem …&lt;br /&gt;
&lt;br /&gt;
Funktionen aufrufen&lt;br /&gt;
&lt;br /&gt;
Die Klassen müssen nicht initialisiert werden, es reicht, sie über die GLOBALS aufzurufen:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery( .... ) &lt;br /&gt;
&lt;br /&gt;
Absicherung gegen SQL-Injection&lt;br /&gt;
&lt;br /&gt;
Alle Eingaben, die vom Besucher der Website kommen (also über GET oder POST) müssen vorher abgesichert werden. Das betrifft vor allem die Befehle zum Einfügen in die Datenbank, ausserdem aber auch die Übernahme von Benutzerdaten in die where-Abschnitte der SQL-Abfragen. Auch hier sollten die Typo3-Funktionen benutzt werden, damit die Quotierung für jede Datenbank passend erfolgt. Folgende Funktionen stehen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von Zeichenketten&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteStr($str,$table); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Zeichenkette, die quotiert werden soll&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
&lt;br /&gt;
    # Quotieren von eindimensionalen Arrays:&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;fullQuoteArray($arr,$table,$noQuote=FALSE); &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: eindimensionales oder assoziatives Array mit den Daten&lt;br /&gt;
    string: Tabellenname (daraus entnimmt DBAL die korrekte Quotierungstechnik)&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen. Nur bei assoziativen Datenarrays anwenden!&lt;br /&gt;
&lt;br /&gt;
    # kommaseparierte Listen zu Integerlisten umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntList($list) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: kommaseparierte Liste mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
    # Arraywerte zu Integer umwandeln (über intval() )&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;cleanIntArray($arr) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    array: Array mit Werten, die Integer sein sollen&lt;br /&gt;
&lt;br /&gt;
Datenbankabfragen&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Tabelle(n). Es gelten die üblichen SQL-Regeln für Aliase&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
    # INSERT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # UPDATE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery    (&lt;br /&gt;
          $table,&lt;br /&gt;
          $where,&lt;br /&gt;
          $fields_values,&lt;br /&gt;
          $no_quote_fields=FALSE&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Tabelle&lt;br /&gt;
    string: WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
    array: Feldwerte als array mit key=&amp;gt;value Paaren. Die Werte werden intern quotiert. Typischerweise verwenden Sie ein Array “$insertFields” mit ‘fieldname’=&amp;gt;‘value’ und übergeben es als Argument.&lt;br /&gt;
    string/array: Liste oder Array von Schlüsseln, die nicht quotiert werden sollen; siehe ober bei fullQuoteArray()&lt;br /&gt;
&lt;br /&gt;
    # DELETE-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery($table,$where) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string Tabelle&lt;br /&gt;
    string WHERE-Anweisung, typischerweise “uid=xx”. Achtung: Sie müssen alle GET- oder POST-Parameter hier selbst quoten – siehe oben.&lt;br /&gt;
&lt;br /&gt;
Spezielle Datenbank-Anweisungen&lt;br /&gt;
&lt;br /&gt;
Die folgende Funktion eignet sich hervorragend zum Auswerten einer n-n Datenverbindung, wie sie zum Beispiel bei der Verwendung von Kategorien anfällt. Bedingung ist allerdings, dass die Verbindung mit einer m_m-Tabelle erfolgt und nicht über ein einzelnes Feld mit kommaseparierter ID-Liste.&lt;br /&gt;
&lt;br /&gt;
    # SELECT relational&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          $select,&lt;br /&gt;
          $local_table,&lt;br /&gt;
          $mm_table,&lt;br /&gt;
          $foreign_table,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Liste der Felder oder * für alle Felder&lt;br /&gt;
    string: Name der lokalen Tabelle&lt;br /&gt;
    string: Name der Relationalen m_m-Tabelle&lt;br /&gt;
    string: Name der fremden, verknüpften Tabelle&lt;br /&gt;
    string: WHERE-Klausel. Wie in SQL üblich. ACHTUNG: man muss alle GET / POST-Werte hier selbst qotieren! Verwenden Sie $this-&amp;gt;fullQuoteStr() – siehe oben. Hier nicht Befehle wie GROUP oder LIMIT verwenden. Es muss ein ‘ AND ‘ eingefügt werden.&lt;br /&gt;
    string: Optionale GROUP-Anweisung&lt;br /&gt;
    string: Optionale ORDER BY-Anweisung&lt;br /&gt;
    string: Optionale LIMIT-Anweisung.&lt;br /&gt;
&lt;br /&gt;
Achtung: Viele Feldnamen in Typo3 sind identisch (uid, pid, hidden etc.). Das kann bei der Auswertung zu Problemen führen, da die Felder nicht eindeutig sind! Es ist deshalb sinnvoll, imm select- und für die Tabellennamen mit Aliasen zu arbeiten:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query(&lt;br /&gt;
          &amp;#039;a.uid as a_uid, b.uid as b_uid&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_1 a&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_m_m&amp;#039;,&lt;br /&gt;
          &amp;#039;tabelle_2 b&amp;#039;,&lt;br /&gt;
          $whereClause=&amp;#039;&amp;#039;,&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Ein ganz besondere Funktion ist listQuery(): Sie ermöglicht eine einfache Behandlung von relationalen Verknüpfungen, die nicht über eine dritte m_m-Tabelle laufen sondern über Felder mit kommaseparierten Listen.&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;listQuery  (&lt;br /&gt;
          $field,&lt;br /&gt;
          $value,&lt;br /&gt;
          $table&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Das Problem derartiger Verknüpfungen ist, dass die Abfrage über LIKE laufen muss, und dabei zusätzlich unterschieden werden muss, auf welcher Seite des gewünschten Wertes das Komma folgt. Kern der Funktion ist diese Zeile:&lt;br /&gt;
&lt;br /&gt;
    $where=&amp;#039;(&amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;&amp;#039;.$command.&amp;#039;,%\&amp;#039; OR &amp;#039;.$field.&amp;#039; LIKE \&amp;#039;%,&amp;#039;.$command.&amp;#039;\&amp;#039; OR &amp;#039;.$field.&amp;#039;=\&amp;#039;&amp;#039;.$command.&amp;#039;\&amp;#039;)&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    string: Feldname, der die kommaseparierte Liste enthält&lt;br /&gt;
    string: Wert, der gefunden werden soll&lt;br /&gt;
    string: Tabelle, in der gesucht wird (für die korrekte Behandlung durch DBAL)&lt;br /&gt;
&lt;br /&gt;
In die gleiche Richtung geht die folgende Funktion, die Srings für die LIKE-Abfrage korrekt für DBAL umsetzt:&lt;br /&gt;
&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;escapeStrForLike($str,$table) &lt;br /&gt;
&lt;br /&gt;
WICHTIG: Es gibt eine hervorragende Abkürzung, um die wichtigen einschränkenden Felder in der WHERE-Abfrage automatisch einzuschließen: hidden, deleted, von/bis, Frontenduser etc. Die WHERE-Abrage muss einfach damit erweitert werden:&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Also zum Beispiel in der exec_SelectQuery:&lt;br /&gt;
&lt;br /&gt;
    # SELECT-Abfrage&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
          $select_fields,&lt;br /&gt;
          $from_table,&lt;br /&gt;
          $where_clause.$this-&amp;gt;cObj-&amp;gt;enableFields(&amp;#039;datenbank&amp;#039;),&lt;br /&gt;
          $groupBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $orderBy=&amp;#039;&amp;#039;,&lt;br /&gt;
          $limit=&amp;#039;&amp;#039;&lt;br /&gt;
    ) &lt;br /&gt;
&lt;br /&gt;
Noch drei weitere Funktionen werden öfter gebraucht:&lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer zurück mit der Anzahl der betroffenen Datenzeilen, z. B. bei INSERT oder UPDATE&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_affected_rows( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, die uid des zuletzt eingefügten Datensatzes (über INSERT)&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_insert_id  ( ) &lt;br /&gt;
&lt;br /&gt;
    # Liefert eine Integer, mit der Anzahl der gefundenen Datensätze&lt;br /&gt;
    $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;t3lib_DB.sql_num_rows($res) &lt;br /&gt;
&lt;br /&gt;
Parameter&lt;br /&gt;
&lt;br /&gt;
    pointer: Der Resultpointer einer vorher erfolgten SELECT-Abfrage.&lt;br /&gt;
&lt;br /&gt;
Weiterführende Links&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    Typo3 Dokumentation Darin suchen nach »t3lib_DB«.&lt;br /&gt;
    t3lib_DB Class Reference (Achtung: geht ausserhalb seines Framesets auf).&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage über piBase ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_gbcamps_pi1 {&lt;br /&gt;
    #CMD =&lt;br /&gt;
    pidList = 36&lt;br /&gt;
    #pidSingle =&lt;br /&gt;
    recursive = 1&lt;br /&gt;
    #templateFile = EXT:gbcamps/res/template.html&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Auskommentierten Werte sind ebenfalls sinnvolle Werte für den Start.&lt;br /&gt;
&lt;br /&gt;
Die Funktion zum Abfragen ist&lt;br /&gt;
 pi_exec_query($table,$count=0,$addWhere=&amp;#039;&amp;#039;,$mm_cat=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$query=&amp;#039;&amp;#039;) &lt;br /&gt;
&lt;br /&gt;
Interessant ist die Tatsache, das die Funktion auf die Parameter des Array $this-&amp;gt;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.&lt;br /&gt;
=== Voraussetzung ===&lt;br /&gt;
In der TypoScript Konfiguration sollten die Werte:&lt;br /&gt;
&lt;br /&gt;
== Über das Globale Datenbankobjekt ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
 t3lib/class.t3lib_db.php&lt;br /&gt;
Die Instanz der Klasse steht im Front und Backend unter $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;] zur Verfügung. Der Aufruf erfolgt z.B. so:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;sql_query(meineParameter);&lt;br /&gt;
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:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECT_mm_query($select,$local_table,$mm_table,$foreign_table,$whereClause=&amp;#039;&amp;#039;,$groupBy=&amp;#039;&amp;#039;,$orderBy=&amp;#039;&amp;#039;,$limit=&amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_Extensions_programmieren_-_Datenbankabfragen&amp;diff=18878</id>
		<title>TYPO3 Extensions programmieren - Datenbankabfragen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_Extensions_programmieren_-_Datenbankabfragen&amp;diff=18878"/>
		<updated>2011-10-13T10:41:49Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: Die Seite wurde neu angelegt: „Siehe hier:  TYPO3_-_Datenbankabfragen_in_Extensions“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siehe hier:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3_-_Datenbankabfragen_in_Extensions]]&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Sicherheit&amp;diff=18877</id>
		<title>Typo3 Extensions programmieren - Sicherheit</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_programmieren_-_Sicherheit&amp;diff=18877"/>
		<updated>2011-10-13T10:40:48Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: /* Weiterführende Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
Typo3 - Security Guideline&lt;br /&gt;
&lt;br /&gt;
http://www.typo3-lisardo.de/home/blog-post/2011/06/29/datenbankabfragen-in-extensions.html&lt;br /&gt;
&lt;br /&gt;
Oder Hier:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 Extensions programmieren - Datenbankabfragen]]&lt;br /&gt;
&lt;br /&gt;
== Stichworte ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Klasse Remove XSS (Core und z.B. mailformplus) &amp;quot;zerhackt&amp;quot; allerdings bestimmte Stichworte. Vielleicht wäre die Lösung die Replace Strings mit &amp;quot;unauffälligen&amp;quot; Zeichen zu nutzen (kurzes Leerzeichen o.ä.)&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=18876</id>
		<title>JavaScript - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=JavaScript_-_Snippets&amp;diff=18876"/>
		<updated>2011-10-13T07:09:24Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: Die Seite wurde neu angelegt: „== Teil einer Seite drucken == Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.  Quelle: http://www.webstool.de/de/tipps_do…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Java-Script_-_Snippets&amp;diff=18875</id>
		<title>Java-Script - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Java-Script_-_Snippets&amp;diff=18875"/>
		<updated>2011-10-13T07:08:48Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Obsolet ! Siehe [[JavaScript - Snippets]]&lt;br /&gt;
&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18874</id>
		<title>Javascript</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18874"/>
		<updated>2011-10-13T07:07:44Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: /* Tipps, Tricks und Snippets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JavaScript Frameworks ==&lt;br /&gt;
&lt;br /&gt;
[[jQuery]]&lt;br /&gt;
&lt;br /&gt;
[[jQTouch]]&lt;br /&gt;
&lt;br /&gt;
jQuery mobile&lt;br /&gt;
&lt;br /&gt;
Sensa (mobil)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JQuery Plugins ==&lt;br /&gt;
&lt;br /&gt;
[[JQuery Tools (flowplayer.org)]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Snippets ==&lt;br /&gt;
=== Tipps, Tricks und Snippets ===&lt;br /&gt;
[[JavaScript - Snippets]]&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Java-Script_-_Snippets&amp;diff=18873</id>
		<title>Java-Script - Snippets</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Java-Script_-_Snippets&amp;diff=18873"/>
		<updated>2011-10-13T07:07:10Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: Die Seite wurde neu angelegt: „ == Teil einer Seite drucken == Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.  Quelle: http://www.webstool.de/de/tipps_d…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Teil einer Seite drucken ==&lt;br /&gt;
Old School JavaScript, sollte sich  aber relativ einfach auf jQuery übertragen lassen.&lt;br /&gt;
&lt;br /&gt;
Quelle: http://www.webstool.de/de/tipps_down_druck3.html Zugriff: 10/2011&lt;br /&gt;
&lt;br /&gt;
Mit einem einfachen JavaScript lässt sich mit relativ wenig Aufwand eine druckerfreundliche Version einer Webseite bei Bedarf erzeugen.&lt;br /&gt;
&lt;br /&gt;
Das JavaScript wird nachstehend vorgestellt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function ausgabe()&lt;br /&gt;
{&lt;br /&gt;
var ref = document.getElementById(&amp;quot;auswahl&amp;quot;);&lt;br /&gt;
var ausgabe;&lt;br /&gt;
// nächste Zeile öffnet ein Fenster der Größe 800 x 600 Pixel&lt;br /&gt;
ausgabe=window.open(&amp;quot;#&amp;quot;,&amp;quot;fenster&amp;quot;,&amp;quot;width=800,height=600,resizable=yes,menubar=yes,left=50,top=50&amp;quot;);&lt;br /&gt;
ausgabe.document.open();&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;\n&amp;lt;title&amp;gt;Druckversion&amp;lt;/title&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;\n&amp;#039;);&lt;br /&gt;
// in der nächsten Zeile an das eigene Stylesheet anpassen&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;../css/design1.css&amp;quot;&amp;gt;\n&amp;lt;/head&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;body&amp;gt;\n&amp;lt;h1 align=&amp;quot;center&amp;quot;&amp;gt;&amp;amp;copy; web s tool - Partner f&amp;amp;uuml;r Ihren Internetauftritt&amp;lt;/h1&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;div&amp;gt;\n&amp;#039;);&lt;br /&gt;
// Ausgabe aller Inhalte mit der id = auswahl&lt;br /&gt;
while (ref!=null)&lt;br /&gt;
{&lt;br /&gt;
ausgabe.document.write(ref.innerHTML + &amp;#039;\n&amp;#039;);&lt;br /&gt;
ref = ref.nextSibling;&lt;br /&gt;
}&lt;br /&gt;
ausgabe.document.write(&amp;#039;&amp;lt;/div&amp;gt;\n&amp;lt;p align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;javascript:window.print()&amp;quot;&amp;gt;drucken&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;\n&amp;#039;);&lt;br /&gt;
ausgabe.document.close();&lt;br /&gt;
ausgabe.focus();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die externe Einbindung des JavaScripts erfolgt dabei z.B. im head-Bereich der Webseite über&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script language=&amp;quot;JavaScript&amp;quot; src=&amp;quot;../scripts/ausgabe4print.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Von entscheidender Bedeutung ist, dass auf der Seite das auszuwählende Objekt mit der id = &amp;quot;auswahl&amp;quot; (bitte bei Bedarf anpassen) versehen ist. Das auszuwählende Objekt kann dabei eine Tabelle oder ein div-Container sein.&lt;br /&gt;
&lt;br /&gt;
Der Aufruf erfolgt z.B. durch den Link &amp;lt;a href=&amp;quot;javascript:ausgabe();&amp;quot;&amp;gt; Druckversion&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18872</id>
		<title>Javascript</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18872"/>
		<updated>2011-10-13T07:05:22Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: /* JQuery Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JavaScript Frameworks ==&lt;br /&gt;
&lt;br /&gt;
[[jQuery]]&lt;br /&gt;
&lt;br /&gt;
[[jQTouch]]&lt;br /&gt;
&lt;br /&gt;
jQuery mobile&lt;br /&gt;
&lt;br /&gt;
Sensa (mobil)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JQuery Plugins ==&lt;br /&gt;
&lt;br /&gt;
[[JQuery Tools (flowplayer.org)]]&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Snippets ==&lt;br /&gt;
=== Tipps, Tricks und Snippets ===&lt;br /&gt;
[[Java-Script - Snippets]]&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18871</id>
		<title>Javascript</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Javascript&amp;diff=18871"/>
		<updated>2011-10-13T07:04:38Z</updated>

		<summary type="html">&lt;p&gt;94.216.235.237: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JavaScript Frameworks ==&lt;br /&gt;
&lt;br /&gt;
[[jQuery]]&lt;br /&gt;
&lt;br /&gt;
[[jQTouch]]&lt;br /&gt;
&lt;br /&gt;
jQuery mobile&lt;br /&gt;
&lt;br /&gt;
Sensa (mobil)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JQuery Plugins ==&lt;br /&gt;
&lt;br /&gt;
[[jQuery Tools]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JavaScript - Snippets ==&lt;br /&gt;
=== Tipps, Tricks und Snippets ===&lt;br /&gt;
[[Java-Script - Snippets]]&lt;/div&gt;</summary>
		<author><name>94.216.235.237</name></author>
	</entry>
</feed>