dibi update bez pouziti WHERE
- tomasnikl
- Člen | 137
Ahoj,
nikde v dokumentaci dibi se mi nepovedlo vycist, jak udelat update tabulky teto struktury:
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`value` text COLLATE utf8_czech_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
INSERT INTO `config` (`name`, `value`) VALUES
('web_title', 'titulek webu'),
('web_keywords', 'klicova, slova'),
('web_description', 'nejaky description webu'),
('web_paginator', '20');
a po odeslani formulare mam takoveto pole hodnot:
$values = array(
web_title => novy titulek",
web_keywords => "nova, klicova, slova"
);
kdzy pouyiju tento zapis:
dibi::update('config', $values)->execute();
tak mi to vyhodi tuto chybu:
Unknown column 'web_title' in 'field list'
jak by se resil takovyto update tabulky, kdyz nemohu pouzit WHERE?
dekuju za rady..
- hAssassin
- Člen | 293
ty v tom poli ale mas spatne ty hodnoty… klicem je nazev sloupecku
v tabulce, ne? a to co vlastne chces ti udela akorat to, ze ti vsechny radky
aktualizuje na novou hodnotu, coz asi nechces… takze se WHERE stejne nevyhnes,
ale misto ID tam budes mit WHERE [name] = 'novy titulek'
. Cili
nejak takto:
$values = array(
value => "nova, klicova, slova"
);
$name = "web_keywords";
dibi::update('[config]', $values)->where('[name] = %s', $name)->execute();
snad sem napsal spravne…
Editoval hAssassin (12. 10. 2011 21:48)
- tomasnikl
- Člen | 137
ale ano, to vpodstate chci. Jelikoz mam na webu jeden velky formular s cca 15ti inputy kde kazdy input predstavuje 1 radek v tabulce databaze. To znamena, ze kdyz mam takovyto input:
<input name="web_title" value="Titulek webu" />
tak v databazi je radek, ktery vypada takto:
name | value //nazvy sloupcu v db
web_title | Titulek webu
a potrebuji, aby po odeslani formulare s 15ti inputy doslu k aktualizaci vsech 15ti radku v tabulce config.
- tomasnikl
- Člen | 137
tak jsem to vyresil takto (sice se mi to moc nelibi ale asi to tak musi byt):
//presenter po odeslani formulare:
$values = $form->getValues();
foreach($values as $key => $value) {
$data = array(
'value' => $value
);
Shared::update($data, $key);
}
//model
public static function update($values, $key)
{
dibi::update('config', $values)->where('name =%s', $key)->execute();
}
- Milo
- Nette Core | 1283
To jednim updatem rozumne neudelas:
foreach ($values AS $name => $value) {
dibi::query('UPDATE [config] SET [value] = %s', $value, 'WHERE [name] = %s', $name);
}