【问题标题】: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 只是一个占位符。我想对我的统计页面做一些特殊的迁移或一些特殊的请求。

【问题讨论】:

    标签: typo3 typo3-10.x


    【解决方案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 - stackoverflow.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2014-06-18
      • 1970-01-01
      • 2021-10-13
      • 2014-07-30
      相关资源
      最近更新 更多