2

有时,当我使用 CakePHP 触发“updateAll”操作时,我会收到语法错误或访问冲突。当我执行以下操作时:

$variable = date('Y-m-d H:i:s')  <- for instance    
$this->Model->updateAll(
array('my_table_column' => $variable),
array('id' => $id));

当我尝试以下方式时,我没有收到此错误:

$this->Model->updateAll(
array('my_table_column' => "'".$variable."'"),
array('id' => $id));

我想知道为什么会发生这种情况,以及这是否是一种保存数据等的保存方式。

4

2 回答 2

3

如文件所述(http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions),您应该使用以下方法转义Sanitize::escape()

$this->Model->updateAll(
    array('my_table_column' => "'" . Sanitize::escape($variable) . "'"),
    array('id' => $id));
于 2013-06-05T18:12:49.977 回答
1

正如文件所说

$fields 数组接受 SQL 表达式。文字值应该使用 DboSource::value() 手动引用。例如,如果您的模型方法之一正在调用 updateAll(),您将执行以下操作:

$ds = $this->getDataSource();
$value = $ds->value($value, 'string');
$this->updateAll(
    array('Baker.status' => $value),
    array('Baker.status' => 'old')
);

或者,如果您在控制器中执行 updateAll(假设您在那里使用 Baker 模型)

$ds = $this->Baker->getDataSource();
$value = $ds->value($value, 'string');
$this->Baker->updateAll(
    array('Baker.status' => $value),
    array('Baker.status' => 'old')
);
于 2016-02-24T11:18:27.703 回答