使用typo3中的函数更新查询

时间:2014-07-01 09:38:41

标签: php mysql typo3

我正在尝试使用myspo 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功能已转义。

2 个答案:

答案 0 :(得分:2)

reference documentation并不是很清楚,但是,只需将TRUE附加到更新功能的参数即可禁用引用:

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

这也意味着如果你还没有,你必须在推出查询之前进行自己的输入清理:

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

答案 1 :(得分:1)

查看noQuote使用的fullQuoteArray() TYPO3\CMS\Core\Database\DatabaseConnection方法的exec_UPDATEquery()参数:

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

当你采用kloser看这种方法时,你会发现一个简单的真实并没有像预期的那样去做。只需使用字段列表(逗号分隔列表)或数组即可让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');