TYPO3 8.x使用Query Builder时出现ConnectionPool未找到异常求助
解决TYPO3 8中找不到ConnectionPool类的异常
问题根源
TYPO3的ConnectionPool类是从TYPO3 9 LTS才开始引入的新数据库连接管理类,而你用的是TYPO3 8,这个版本里根本不存在这个类,所以会触发"类未找到"的异常。
解决方案
在TYPO3 8中,你需要使用旧版的DatabaseConnection类来获取QueryBuilder,具体修改步骤如下:
1. 替换引入的类
把原来的ConnectionPool引入替换为DatabaseConnection:
// 替换前 use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; // 替换后 use TYPO3\CMS\Core\Database\DatabaseConnection; use TYPO3\CMS\Core\Utility\GeneralUtility;
2. 修改QueryBuilder的获取逻辑
用DatabaseConnection实例来获取QueryBuilder,而不是ConnectionPool:
public function getItems($Variable1,$Variable2) { // 获取数据库连接实例 $dbConnection = GeneralUtility::makeInstance(DatabaseConnection::class); // 获取对应表的QueryBuilder $queryBuilder = $dbConnection->getQueryBuilderForTable('tx_xxxxxx'); // 后续的select逻辑保持不变,举个完整示例: $statement = $queryBuilder ->select('*') ->from('tx_xxxxxx') ->where( $queryBuilder->expr()->eq('your_field1', $queryBuilder->createNamedParameter($Variable1)), $queryBuilder->expr()->like('your_field2', $queryBuilder->createNamedParameter('%' . $Variable2 . '%')) ) ->execute(); // 处理查询结果 $items = $statement->fetchAll(); return $items; }
额外提醒
- 如果你之后升级到TYPO3 9+版本,再把代码切换回
ConnectionPool的方式即可,那时候旧的DatabaseConnection会被标记为废弃。 - 不管是TYPO3 8还是新版本,使用QueryBuilder时一定要用
createNamedParameter绑定参数,避免SQL注入风险,这一点是通用的。
内容的提问来源于stack exchange,提问作者Karthik




