/** * Prepares a prepared query. * * @param string $query The query to execute * @param array $queryComponents The components of the query to execute * @return bool|\mysqli_statement|\TYPO3\CMS\Dbal\Database\AdodbPreparedStatement * @throws \RuntimeException * @internal This method may only be called by \TYPO3\CMS\Core\Database\PreparedStatement */ public function prepare_PREPAREDquery($query, array $queryComponents) { $pt = $this->debug ? GeneralUtility::milliseconds() : 0; // Get handler key and select API: $preparedStatement = NULL; switch ($queryComponents['handler']) { case 'native': $this->lastQuery = $query; $preparedStatement = parent::prepare_PREPAREDquery($this->lastQuery, $queryComponents); $this->resourceIdToTableNameMap[serialize($preparedStatement)] = $queryComponents['ORIG_tableName']; break; case 'adodb': /** @var \TYPO3\CMS\Dbal\Database\AdodbPreparedStatement $preparedStatement */ $preparedStatement = GeneralUtility::makeInstance(\TYPO3\CMS\Dbal\Database\AdodbPreparedStatement::class, $query, $queryComponents, $this); if (!$preparedStatement->prepare()) { $preparedStatement = FALSE; } break; case 'userdefined': throw new \RuntimeException('prepare_PREPAREDquery is not implemented for userdefined handlers', 1394620167); /* $queryParts = $queryComponents['queryParts']; $preparedStatement = $this->handlerInstance[$this->lastHandlerKey]->exec_SELECTquery($queryParts['SELECT'], $queryParts['FROM'], $queryParts['WHERE'], $queryParts['GROUPBY'], $queryParts['ORDERBY'], $queryParts['LIMIT']); if (is_object($preparedStatement)) { $preparedStatement->TYPO3_DBAL_handlerType = 'userdefined'; // Setting handler type in result object (for later recognition!) $preparedStatement->TYPO3_DBAL_tableList = $queryComponents['ORIG_tableName']; } break; */ } if ($this->printErrors && $this->sql_error()) { debug(array($this->lastQuery, $this->sql_error())); } if ($this->debug) { $data = array('handlerType' => $queryComponents['handler'], 'args' => $queryComponents, 'ORIG_from_table' => $queryComponents['ORIG_tableName']); $this->debugHandler('prepare_PREPAREDquery', GeneralUtility::milliseconds() - $pt, $data); } // Return result handler. return $preparedStatement; }