有时当我从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));
我想知道为什么会发生这种情况,如果这是保存数据等的保存方式。
答案 0 :(得分: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));
答案 1 :(得分:0)
正如documentation所说
$ 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')
);