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() を使用して手動で引用する必要があります。たとえば、モデル メソッドの 1 つが 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 に答える