Вот мой метод обновления для Kohana 3.
public function update($type, $id, $updates) {
$info = $this->getInfo($type);
$dbTable = $info['table'];
$updatesKeysToValues = array();
var_dump($updates);
foreach($updates as $key => $value) {
// if the value is null or the key isnt set for this, don't update!
if ($value === null OR ! isset($info['columnsToUpdateData'][$key])) continue;
$updatesKeyToValues[] = "`$key` = :$key";
}
$updatesKeyToValues = implode(', ', $updatesKeyToValues);
$query = 'UPDATE `' . $dbTable . '` SET ' . $updatesKeyToValues . ' WHERE id = :id LIMIT 1' ;
echo $query;
$dbQuery = DB::query(Database::UPDATE, $query);
foreach($updates as $key => $value) {
echo "$key === $value\n<br>";
$dbQuery->bind(':' . $key, $value);
}
$success = $dbQuery->bind(':id', $id)
->execute();
var_dump($success);
}
Во время каждого var_dump()
и echo
данные в порядке.Ничто не говорит о том, почему это происходит.
По сути, я делаю получение данных для этой таблицы из конфигурации, построение строки запроса с именованными параметрами, циклическое выполнение и определение именованных параметров, а затем выполнение.Вместо того, чтобы работать, я получаю все поля одинаковыми (кажется, что это было последнее значение массива).
Кажется, я не могу понять это, не так ли?Большое спасибо за ваше время.
ОБНОВЛЕНИЕ
Мне только что пришла в голову мысль, действительны ли подчеркивания в именах параметров в запросе?
ДРУГОЕ ОБНОВЛЕНИЕ
Вот вывод echo $query
UPDATE `personnel` SET `first_name` = :first_name, `last_name` = :last_name, `email` = :email WHERE id = :id LIMIT 1
Я также разработал этот метод привязки нескольких параметров к запросу тоже.Я никогда не делал это раньше, но я предполагал, что это сработает.В Kohana 2.x я всегда использовал $bindings[] = 'tom@jones.com'
и т. Д., Но, насколько я могу судить, новая Kohana не принимает массив.
FINAL UPDATE
Спасибо всем, я думаю, что это передается по ссылке.Я обошел его, установив $updates[$key]
Похоже, я мог бы также использовать метод param()
вместо bind. Просмотр источника