使用typo3格式的函数更新查询


update query with functions in typo3

我试图使用mysql CONCAT函数的typo3更新函数。你能告诉我怎么做吗?我试过的:

$updateArray = array("field" => 'CONCAT( field'.','.$toAppend.')');
$GLOBALS['TYPO3_DB']->exec_UPDATEquery ('table','id = '.'"'.$some_id.'"',$updateArray);

不行,因为查询被执行了:

UPDATE table
SET
pagesEdited='CONCAT( field,'value')'
WHERE
id = "id"

如您所见,concat函数被转义了。

参考文档对此不是很清楚,但是,只需将TRUE附加到更新函数的参数中,就可以禁用引号:

$GLOBALS['TYPO3_DB']->exec_UPDATEquery ('table','id = '.'"'.$some_id.'"',$updateArray, TRUE);

这也意味着您必须在启动查询之前执行自己的输入清理,如果您还没有这样做的话:

$toAppend = $GLOBALS['TYPO3_DB']->fullQuoteString($toAppend, "");

查看exec_UPDATEquery()使用的TYPO3'CMS'Core'Database'DatabaseConnectionfullQuoteArray()方法的noQuote参数:

@param boolean|array $noQuote List/array of keys NOT to quote (eg. SQL functions) - ONLY for associative arrays

当你仔细观察这个方法时,你会发现一个简单的true并没有达到预期的效果。只需使用一个字段列表(逗号分隔的列表)或一个数组,让TYPO3知道哪些字段不应该转义。

在你的例子中,它看起来像这样:

$updateArray = array(
    'field' => 'CONCAT(field,' . $GLOBALS['TYPO3_DB']->fullQuoteString($toAppend, 'table') . ')',
);
$where = 'id = ' . $GLOBALS['TYPO3_DB']->fullQuoteString($some_id, 'table');
$GLOBALS['TYPO3_DB']->exec_UPDATEquery ('table', $where, $updateArray, 'field');