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 Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

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

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