2015-08-18 38 views
0

嗨即時運行到CakePHP中的一個問題,當我使用此查詢SQL注入和和updateall CakePHP的問題

$this->Rh->CompetencesUser->updateAll(array(
    'CompetencesUser.niveau' => "'$value[1]'", 
    'CompetencesUser.expertise' => $value[2], 
    'CompetencesUser.rh_id' => $this->Rh->getLastInsertId() 
), array(
    'CompetencesUser.user_id' => $this->request->params['pass'][0], 
    'CompetencesUser.competence_id' => $value[3] 
)); 

它的工作原理,但是當我在場上$value[1]給予一定的字符,如「它顯示了一個錯誤,所以我怎麼可以逃避這個角色,或者我可以使用其他方法,因爲$value[1]不加入這些引號就不起作用。 在此先感謝

+0

@Holt根據[文檔](http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-mixed-條件):$ fields數組接受SQL表達式,所以文本值應該手動引用。 – marian0

+0

我認爲這個,但是當我舉例如一個像家一樣的字符串時,我得到了這個SQL錯誤,說現場家庭unkonwn列,因爲它沒有報價。它應該像'家'一樣,它的作品。我發現爲什麼我要問的話加上引號是非常愚蠢的。蛋糕應該這樣做 – user1655410

+0

oki,現在我明白了,謝謝 – user1655410

回答

3

the docs中所述「應使​​用DboSource :: value()手動引用文字值」。

例如: -

$db = $this->Rh->CompetencesUser->getDataSource(); 
$this->Rh->CompetencesUser->updateAll(
    ['CompetencesUser.niveau' => $db->value($value[1], 'string')], 
    [ // Some conditions ] 
); 

在大多數情況下updateAll()不是方法的數據保存和save()會更適合正確的選擇。看看Use CakePHP 2's updateAll() Method with Caution!