blog.bartlweb - a technologist's external brain

SQL-Funktionen des TYPO3-PHP-Frameworks

Das PHP-Framework von TYPO3 bietet einfache Funktionen für das Ausführen von SQL-Kommandos, die den Zusammenbau der einzelnen SQL-Statements übernehmen. Nähere Informationen und weitere nützliche Funktionen, wie z.B.: searchQuery() finden sich in der offiziellen TYPO3-Klassen-Dokumentation api.typo3.org/typo3cms/47/html/classt3lib___d_b.html.

Funktionen

insert

$result = exec_INSERTquery(
  'table',
  array('field' => 'value')
);

update

$result = exec_UPDATEquery(
  'table',
  'where',
  array('field' => 'value')
);

delete

$result = exec_DELETEquery(
  'table',
  'where'
);

select

$result = exec_SELECTquery(
  'fields',
  'table',
  'where',
  'groupBy (optional)',
  'orderBy (optional)',
  'limit (optional)'
);

SELECTgetRows

Liefert anstelle eines Result-Pointers ein Array mit den angeforderten Werten zurück.

$result = exec_SELECTgetRows(
  'fields',
  'table',
  'where',
  'groupBy (optional)',
  'orderBy (optional)',
  'limit (optional)'
);

Debuggen

Um sich den durch die Funktionen genertierten SQL-Befehl ausgeben zu lassen, reicht es bei der jeweiligen Funktion das exec_ wegzulassen. Dadurch liefert die Funktion das generierte Statement retour.

$result = $GLOBALS['TYPO3_DB']->SELECTquery(
  'field',
  'table',
  'where'
);
 
t3lib_div::debug($result);

Beispielcode

select

$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
  'fields',
  'table',
  'where'
);
 
if ($GLOBALS['TYPO3_DB']->sql_num_rows($result)) {                            
  while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)){
    t3lib_div::debug($row);             
  }
}

delete

$result = $GLOBALS['TYPO3_DB']->exec_DELETEquery(
  'table',
  'where'
);
 
if($GLOBALS['TYPO3_DB']->sql_affected_rows($result) > 0) {
  echo 'rows successfully deleted';           
}

select mit Übersetzung im Fallback-Mode

Dieses Statement holt die Daten in der Standardsprache und überschreibt diese mit eventuell vorhandenen Übersetzungen.


/* create statement */
$fields = 'uid, pid, sys_language_uid, title'
$table = 'tx_ext_table';
  // get default language element
$where = 'uid = ' . $this->piVars['uid'] . ' AND sys_language_uid = 0';
  // use typo3-function for adding exclude fields (hidden = 0, deleted = 0, group and date statements)
$where .= $GLOBALS['TSFE']->sys_page->enableFields($table);
$order = '';
$group = '';
$limit = '';
 
/* exec sql-command */
$result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, $where, $group, $order, $limit);
 
$data = array();
if($GLOBALS['TYPO3_DB']->sql_num_rows($result)){                           
  while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc(result)){
    $orig_uid = $row['uid'];
 
    // get translation
    if($GLOBALS['TSFE']->sys_language_uid != 0) {
      $subresult = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, 'sys_language_uid = ' . $GLOBALS['TSFE']->sys_language_uid . ' AND l18n_parent = ' . $row['uid'] . ' AND pid = ' . $row['pid']);
      if($GLOBALS['TYPO3_DB']->sql_num_rows($result)){                           
        if($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc(result)){
          foreach($row as $field => $value){
            if($value) {
              $row[$field] = $value;
            }
          }
        }
      }
    }
   
    // write data to array
    $row['uid'] = $orig_uid;
    $data = $row;
  }
}
 
/* process data */
t3lib_div::debug($data);

Die Übersetzung des Content-Elements kann auch mit einer speziellen TYPO3-Funktion erfolgen. Diese Berücksichtigt allerdings den global eingestellten Content-Fallback-Mode.

$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($table, $row, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL);

 

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste - ich freue mich über deine Anmerkungen, Kritik und Fragen.

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "3804" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.