2010-12-20 108 views
3

我有以下代码:CakePHP的updateAll不工作

$this->Permissions->updateAll(
    array('Permissions.user' => $newuser), 
    array('Permissions.user' => $originaluser) 
); 

但是当我运行它,我得到以下错误:

Warning (512): SQL Error: 1054: Unknown column 'counterstaff' in 'field list' [APP\cake\cake\libs\model\datasources\dbo_source.php, line 681] 

Query: UPDATE `permissions` AS `Permissions` SET `Permissions`.`user` = counterstaff WHERE `Permissions`.`user` = 'counter' 

由于某种原因,认为我想设置的值是一列。任何人有任何想法,为什么这是发生?

回答

-2

问题与更新查询放在引号的东西的价值一样

UPDATE `permissions` AS `Permissions` SET 
`Permissions`.`user` = "counterstaff" WHERE 
`Permissions`.`user` = 'counter' 
+8

这个答案在使用Cake时根本没有帮助。 – 472084 2012-11-20 12:01:30

13

修好了!我必须在我的变量添加单引号,像这样:

$this->Permissions->updateAll(
    array('Permissions.user' => "'".$newuser."'"), 
    array('Permissions.user' => $originaluser) 
); 
+1

SQL注入是可能这样。 'updateAll'获取SQL表达式作为params,而不是其他CakePHP funcs所做的值。这是更好的价值报价:'$ this->权限 - > updateAll( array('Permissions.user'=> $ this-> Permissions-> value($ newuser)), array('Permissions.user'= > $ originaluser) );' – 2011-07-20 06:04:49

+2

为什么Cake做到这一点? – 472084 2012-11-20 12:05:04

+0

@ 472084我相信这样可以做更复杂的表达式,这在更新中很常见。例如,这样你可以做'updateAll(array('Page.visits'=>'Page.visits + 1'),array('Page.id'=> $ pageid))''。否则将需要两个查询。此行为在[updateAll]文档中有详细记录(http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions)文档。 – cincodenada 2014-04-21 20:05:14

4
**Use this code for updating your data:** 
$this->Permissions->updateAll(
     array('Permissions.user' => "'$newuser'"), 
     array('Permissions.user' => "'$originaluser'") 
    );