【发布时间】:2020-11-19 08:23:36
【问题描述】:
TYPO3 QueryBuilder 方法 createNamedParameter 只支持有符号整数,但不支持无符号整数。无符号整数甚至没有 PDO 常量。而且 TYPO3 似乎没有像数组 Connection::PARAM_INT_ARRAY 这样的其他常量。
static public function checkDoublePostExist ($table, $doublePostField, $key)
{
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
$queryBuilder->setRestrictions(GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer::class));
$result =
$queryBuilder
->count('*')
->from($table)
->where(
$queryBuilder->expr()->eq($doublePostField, $queryBuilder->createNamedParameter($key, \PDO::PARAM_INT))
)
->execute()
->fetchColumn(0);
return $result;
}
SQL字段定义为:
doublePostCheck int(11) unsigned DEFAULT '0' NOT NULL
生成的SQL会是这样的:
SELECT COUNT(*) FROM `tt_board` WHERE (`doublePostCheck` = -1018532669) AND (`tt_board`.`deleted` = 0)
这很奇怪,因为该字段不允许有负值。恐怕这个查询不会做正确的事情。
字符串格式可以用于无符号整数吗?
->where(
$queryBuilder->expr()->eq($doublePostField, $queryBuilder->createNamedParameter($key, \PDO::PARAM_STR))
)
生成的 SQL 是正确的:
SELECT COUNT(*) FROM `tt_board` WHERE (`doublePostCheck` = '3276434627') AND (`tt_board`.`deleted` = 0)
哪种解决方案最适合无符号整数?
【问题讨论】:
标签: typo3 query-builder