2015-08-18 2 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/ru/models/saving-your-data.html#model-updateall-array-fields-mixed- условия): массив $ fields принимает выражения SQL, поэтому литеральные значения должны быть указаны вручную. – marian0

+0

Я думал об этом, но когда я даю, например, строку, такую ​​как дом, я получил эту ошибку sql, говорящую о поле для разметки поля, и потому что в ней нет цитат. это должно быть что-то вроде «дома», и оно работает. Я считаю, что очень глупо добавлять цитаты, которые почему-то спрашивают. Торт должен сделать это – 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!

Смежные вопросы