Showing posts with label datenbank. Show all posts
Showing posts with label datenbank. Show all posts

Sunday, April 19, 2015

Wie kann ich TYPO3 Datenbank-Abfragen debuggen? (TYPO3 6.x)

Zwei Techniken zum debuggen von TYPO3 6.x DB queries:

1. Constraints "sammeln" und ausgeben:

Beim zusammenstellen der Query die Constraints folgendermassen festhalten:

$constraints[] = $query->logicalAnd($searchConstraints);
...


Und abschliessend ausgeben:

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($constraints);

2. SQL Query ausgeben:

/**
* Debugs a SQL query from a QueryResult
*
* @param \TYPO3\CMS\Extbase\Persistence\Generic\QueryResult $queryResult
* @param boolean $explainOutput
* @return void
*/
public function debugQuery(\TYPO3\CMS\Extbase\Persistence\Generic\QueryResult $queryResult, $explainOutput = FALSE) {
   $GLOBALS['TYPO3_DB']->debugOuput = 2;
   if ($explainOutput) {
      $GLOBALS['TYPO3_DB']->explainOutput = true;
   }
   $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = true;
   $queryResult->toArray();
   DebuggerUtility::var_dump($GLOBALS['TYPO3_DB']->debug_lastBuiltQuery); 
   $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = false;
   $GLOBALS['TYPO3_DB']->explainOutput = false;
   $GLOBALS['TYPO3_DB']->debugOuput = false;
}

...und dann zur Ausgabe z.B.:

$events = $this->eventRepository->findDemanded($demand, $limit); $this->debugQuery($events);


Quelle:
http://blog.undkonsorten.com/sql-queries-debuggen-in-typo3

Wednesday, February 26, 2014

Wie kann ich PHP TYPO3-Datenbank-Abfragen debuggen?


(fuer TYPO3 <= 4.7 ?)

Hier ein kurzes Beispiel:

$GLOBALS['TYPO3_DB']->debugOutput = true;
$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = true;
 

$res = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
...

);

echo $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;



Extbase SQL Queries ausgeben

(fuer TYPO3 >= 6.0 ?)
 
Quelle:
http://www.in2code.de/community/snippet-datenbank/snippets/detail/extbase-sql-queries-debuggen/

Extbase SQL Queries werden in der Datei...
typo3\sysext\extbase\Classes\Persistence\Storage\Typo3DbBackend.php

...in der Methode "buildQuery" erstellt. Hier koennen diese ausgegeben werden.
 Um nicht jede Query (gesamter Seitenaufbau) auszugeben kann die gewuenschte Tabelle herausgefiltert werden:

if (in_array("table_name", $sql['tables'])) {
    echo $statement;
}