如何在 Typo3 版本 10 ($GLOBALS['TYPO3_DB']->sql_query()) 中执行普通 SQL?

Posted

技术标签:

【中文标题】如何在 Typo3 版本 10 ($GLOBALS[\'TYPO3_DB\']->sql_query()) 中执行普通 SQL?【英文标题】:How to execute plain SQL in typo3 version 10 ($GLOBALS['TYPO3_DB']->sql_query())?如何在 Typo3 版本 10 ($GLOBALS['TYPO3_DB']->sql_query()) 中执行普通 SQL? 【发布时间】:2020-08-27 05:32:14 【问题描述】:

有没有办法在typo3 版本10 中执行普通SQL?我该怎么做?

// in previous versions you could do the following
$sql = 'SELECT * FROM tt_content;';
$GLOBALS['TYPO3_DB']->sql_query($sql);
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) 
  // ...

编辑

简单的脚本SELECT * FROM tt_content 只是一个占位符。我想对我的统计页面做一些特殊的迁移或一些特殊的请求。

【问题讨论】:

【参考方案1】:

不再需要在 TYPO3 中执行原始 SQL,因为基于 Doctrine 的 DBAL API 功能强大,基本上可以让您做任何事情。

你的例子using the TYPO3 Connection class:

$result = GeneralUtility::makeInstance(ConnectionPool::class)
    ->getConnectionForTable('tt_content')
    ->select(['*'], 'tt_content');

foreach ($result as $row) 
    // ...


【讨论】:

对不起,简单的脚本只是一个占位符。我想对我的统计页面做一些特殊的迁移或一些特殊的请求。 当然,但我写的仍然是真的,你应该可以用 DBAL API 做任何事情。 不支持INSERT .. ON DUPLICATE UPDATE - ***.com/questions/4555323/… 这就是我写“基本上”的原因。 ;-) 当然,它不能涵盖所有边缘情况。【参考方案2】:
$connection = GeneralUtility::makeInstance(ConnectionPool::class)
->getConnectionForTable('tt_content');
$resultSet = $connection->query('SELECT * FROM tt_content')->execute();

【讨论】:

这可能是一个正确的答案,但对您的代码提供额外的解释会很有用,以便开发人员能够理解您的推理。这对于可能不熟悉语法的新开发人员特别有用。此外,它可以帮助减少对后续问题的需求。您介意用更多详细信息更新您的评论吗? 答案对我有帮助,但如果有解释当然会更好。 我不知道可以用什么样的解释,因为代码很琐碎......让我试着解释一下:“你需要创建一个新的连接池实例,获取一个数据库连接对象从中调用它的 query() 方法”。我希望它有所帮助。【参考方案3】:

对我来说与 TYPO3 9 一起工作。

    // looky-looky at 20200609: https://www.strangebuzz.com/en/snippets/running-raw-sql-queries-with-doctrine
    /** @var Connection $connection */
    $connection = GeneralUtility::makeInstance(ConnectionPool::class)
        ->getConnectionForTable(self::TABLENAME);
    /** @var DriverStatement $statement */
    $statement = $connection->prepare($sql);
    $statement->execute();

感谢Idea

【讨论】:

以上是关于如何在 Typo3 版本 10 ($GLOBALS['TYPO3_DB']->sql_query()) 中执行普通 SQL?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试在 TYPO3 版本上安装自定义扩展时,如何解决我得到的错误。 10?

如何在 TYPO3 中获取当前页面的 ID

如何在 TYPO3 v10/v11 中为控制器操作参数定义正则表达式验证?

哪个 TYPO3 版本支持啥 PHP 版本?

在 TYPO3 后端的页面视图中显示列表

TYPO3 Extbase - 重定向到 pid