【问题标题】:Typo3, How can I get the MySQL query created from the query object [duplicate]Typo3,如何获取从查询对象创建的 MySQL 查询 [重复]
【发布时间】:2014-11-03 17:57:45
【问题描述】:

我是 Typo3 的新手。我正在使用它的 6.1 版本。

我需要显示从查询对象生成的 MySQL 查询。请告诉我该怎么做?

以下是我的存储库类中的代码 sn-p。

$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(false);
$query->matching(
    $query->equals('id',intval($id))
);

return $query->execute();

我需要在执行和返回查询结果之前显示 MySQL 查询。

请告诉我该怎么做。

提前致谢。

【问题讨论】:

  • 只是为了调试目的?
  • @Xatenev,是的,我想检查我的查询中出了什么问题,因为它没有显示预期的输出。
  • @biesior,我已经检查过该主题,但对我没有帮助。因此,如果您对我的问题有任何其他解决方案,请告诉我。
  • @KrishDamani 那里描述的解决方案仅可用
  • @biesior,好的,我知道了如何实现它。您的意思是在核心库文件中实现它,然后在完成调试后将其删除,对吧?这就是我所做的。

标签: php mysql extbase typo3-6.1.x


【解决方案1】:

在 extbase 中,它非常很难显示最后一个查询。

您可以尝试普通的 TYPO3 方式,但您必须先执行查询才能执行此操作:

$GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1;

//query

// the complete SQL-Statement
echo $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;

另一种方法是在return statement 之前进入buildQuery(array $sql) 并添加这个sn-p:

if (in_array("your_table_name", $sql['tables'])) {
    var_dump($statement);
    print_r($statement);
}

您可以在此处找到 buildQuery 方法:

TYPO3 ver.: 4.x: typo3/sysext/extbase/Classes/Persistence/Storage/Typo3DbBackend.php
TYPO3 ver.: 6.x: typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php

编辑: 一个很好的方法是拼错列名。例如:列叫test,叫它testsdffq。查询将失败,它会显示整个查询。

【讨论】:

  • 我不知道如何实现这一点。能详细点吗?
  • 好的,我尝试实现第二种方式。您的意思是在核心库文件中实现它,然后在完成调试后将其删除,对吧?这就是我所做的。
  • @KrishDamani 是的 :)。您必须将其放入核心,因为查询是在那里构建的。在发生其他任何事情之前,您必须获取原始查询:)。
【解决方案2】:

也许这会有所帮助。

确保在 localconf.php 中设置了以下内容:

$TYPO3_CONF_VARS['SYS']['sqlDebug'] = '1';   
$TYPO3_CONF_VARS['FE']['debug'] = '1';  

试试

$res = $GLOBALS['TYPO3_DB']->SELECTquery('*', 'tx_xmluploader_xml_import_tree', 'xml_import_id='.$xml_import_id);
t3lib_div::debug($res);

结果将是前端查询的输出。然后你可以在 MySQL 中执行它进行调试。

【讨论】:

  • 如何获取变量$xml_import_id 的值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2023-04-08
相关资源
最近更新 更多