Хм, согласно документации для функции update_batch (), они просто утверждают, что
"значения автоматически экранируются, создавая более безопасные запросы"
с этими словамиЯ вижу, подразумевается, что поля и имена таблиц не защищены.
Но на странице "запросов" они как бы противоречат, говоря:
Во многих базах данных желательнозащитить имена таблиц и полей - например, с помощью обратных галочек в MySQL.Запросы Active Record автоматически защищаются, однако если вам нужно вручную защитить идентификатор, вы можете использовать:
$ this-> db-> protect_identifiers ('table_name');
AndIIRC - это правда, AR всегда заключает имена в обратные метки (поэтому обычно нужно передавать FALSE в метод активной записи, если вы не хотите, чтобы экранирование не связывалось с частью запроса).
РЕДАКТИРОВАТЬ:
Хм, я просто быстро пошел по коду, и выглядит, как это сбежал :
// Batch this baby
for ($i = 0, $total = count($this->ar_set); $i < $total; $i = $i + 100)
{
$sql = $this->_update_batch($this->_protect_identifiers($table, TRUE, NULL, FALSE), array_slice($this->ar_set, $i, 100), $this->_protect_identifiers($index), $this->ar_where);
$this->query($sql);
}
Итак, migth действительно будет ошибкой;Пока что, если ваши имена таблиц не генерируются динамически, вы можете просто проигнорировать это и в любом случае быть в безопасности;или вы можете запустить метод protect_identifiers()
и сделать это самостоятельно (в принципе неправильно, но эй ...).
Вы можете попытаться воспроизвести ошибку более одного раза, а затем отправить файл сообщение об ошибке