1

有没有办法在 TYPO3 9 中执行原始 SQL 查询?

相当于$GLOBALS['TYPO3_DB']->sql_query($sql);以前版本的东西。

4

3 回答 3

0

在您的存储库中,您可以使用statement()它。

例子:

$query = $this->createQuery();

$sql = '
    SELECT fieldA, fieldB
    FROM table
    WHERE 
        pid = '.$pid.'
        AND someField = 'something'
';

$query->statement($sql)->execute();

确保您负责清理输入!

于 2020-10-28T10:43:14.413 回答
0

你可以使用querybuilderwith 它的方法
TYPO3\CMS\Core\Database\Query\QueryBuilder::selectLiteral(string ... $selects)

意识到:

指定要在查询结果中返回的项目。替换任何先前指定的选择(如果有)。这应该只用于文字 SQL 表达式,因为不会对项目执行任何类型的引用/转义。

还有
TYPO3\CMS\Core\Database\Query\QueryBuilder::addSelectLiteral(string ... $selects)

添加要在查询结果中返回的项目。这应该只用于文字 SQL 表达式,因为不会对项目执行任何类型的引用/转义。

于 2020-01-13T06:53:52.200 回答
0

ORM 概念似乎使使用原始 SQL 变得困难。

    /**
     * @param string $tableName
     * @return bool
     */
    public function createMySplitTable($newTableName = self::TABLENAME)
    {
        if ($newTableName !== self::TABLENAME) {
            $baseTable = self::TABLENAME;
            // make a structure-copy of the main table
            $sql ="CREATE TABLE $newTableName SELECT * FROM $baseTable AS main LIMIT 0;";
            // looky-looky at 20200609: https://www.strangebuzz.com/en/snippets/running-raw-sql-queries-with-doctrine
            // seems to work
            /** @var Connection $connection */
            $connection = GeneralUtility::makeInstance(ConnectionPool::class)
                ->getConnectionForTable(self::TABLENAME);
            /** @var DriverStatement $statement */
            $statement = $connection->prepare($sql);
            $statement->execute();
//            // --- don't work for me :-( 
//            /** @var QueryBuilder $queryBuilder */
//            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
//                ->getQueryBuilderForTable($baseTable);
//            $queryBuilder->resetRestrictions();
//            $queryBuilder->resetQueryParts();
//            $queryBuilder->add($sql,'select');  // Tried some variations
//            $queryBuilder->execute();
//            // --- don't work for me :-(
//            /** @var Query $query */ // Extbase won't work for this query
//            $query = $this->createQuery();
//            $query->statement($sql);
//            $query->execute(true);
//            // --- work only for TYPO3 8 and lower
//            $GLOBALS['TYPO3_DB']->sql_query($sql);  /// < TYPO3 8
//  
        }
    }

感谢https://www.strangebuzz.com/en/snippets/running-raw-sql-queries-with-doctrine

于 2020-06-09T08:06:11.547 回答