Db::statement() 

\nn\t3::Db()->statement($statement = '', $params = [], $types = []); 

Eine "rohe" Query an die Datenbank absetzen. Näher an der Datenbank geht nicht. Du bist für alles selbst verantwortlich. Injections steht nur Deine (hoffentlich ausreichende :) Intelligenz entgegen.

Hilft z.B. bei Abfragen von Tabellen, die nicht Teil der Typo3 Installation sind und daher über den normal QueryBuilder nicht erreicht werden könnten.

// Variablen IMMER über escapen!
$keyword = \nn\t3::Db()->quote('suchbegriff');
$rows = \nn\t3::Db()->statement( "SELECT  FROM tt_news WHERE bodytext LIKE '%{$keyword}%'");

// oder besser gleich prepared statements verwenden:
$rows = \nn\t3::Db()->statement( 'SELECT  FROM tt_news WHERE bodytext LIKE :str', ['str'=>"%{$keyword}%"] );

// Typen können übergeben werden (bei Array wird das automatisch ermittelt)
$rows = \nn\t3::Db()->statement( 'SELECT  FROM tt_news WHERE uid IN (:uids)', ['uids'=>[1,2,3]], ['uids'=>Connection::PARAM_INT_ARRAY] );
Copied!

Bei einem SELECT Statement werden die Zeilen aus der Datenbank als Array zurückgegeben. Bei allen anderen Statements (z.B. UPDATE oder DELETE) wird die Anzahl der betroffenen Zeilen zurückgegeben.

@param string $statement
@param array $params
@param array $types
@return mixed

Source Code 

public function statement( $statement = '', $params = [], $types = [] )
{
	$connection = $this->getConnection();
	// exec / fetchAll --> @siehe https://bit.ly/3ltPF0S
	// set types automatically if params were used
	foreach ($params as $key=>$val) {
		// was type defined in arguments? then skip
		if (isset($types[$key])) {
			continue;
		}
		// type not defined - and not array? then add type
		if (!is_array($val)) {
			if (is_numeric($val)) {
				$types[$key] = Connection::PARAM_INT;
			} else {
				$types[$key] = Connection::PARAM_STR;
			}
			continue;
		}
		// type not defined and array?
		$allNumeric = count(array_filter($val, 'is_numeric')) === count($val);
		$types[$key] = $allNumeric ? Connection::PARAM_INT_ARRAY : Connection::PARAM_STR_ARRAY;
	}
	if (stripos($statement, 'select ') !== false) {
		$result = $connection->fetchAllAssociative( $statement, $params, $types );
	} else {
		$result = $connection->executeStatement( $statement, $params, $types );
	}
	return $result;
}
Copied!