2010-12-20 36 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'") 
    );