dynamické generování dotazu
- jik
- Člen | 149
Zdravím,
Hodil by se mi přibližně takovýto model:
<?php
public function update ($id, $record, $editor) {
$dotaz = '$this->find($id)->update(array(';
$run = false;
foreach ($record as $key=>$value) {
$run = true;
if (is_bool($value) or is_numeric($value)) {
$dotaz .= "'$key'=>$value, ";
} else {
$dotaz .= "'$key'=>'$value', ";
}
}
if ($run) {
$dotaz .= "'edited'=>new \DateTime()));";
$return = eval("return $dotaz;");
return $return;
} else {
return 0;
}
}
?>
V zásadě to sice ve většině případů chodí, ale teď jsem narazil na zprávu
Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier.
A nevím, proč. Děkuji za radu.
- Robin Martinez
- Člen | 89
py tíčo…
O_o
začal bych tím, že to celý předělám = zbavil se evilu evalu
a dotaz skládal normálně (poslal jako pole).
Editoval 3ugeene (18. 8. 2014 14:39)
- Robin Martinez
- Člen | 89
Glubo napsal(a):
jik napsal(a):
Aha, už mi kapalo na karbid, takže:
<?php public function update ($id, $record) { return = $this->find($id)->update($record); } ?>
a funguje…
Btw. to edited se takhle samo spravne updatne?
ne, leda to řeší někde před tím :D
Editoval 3ugeene (18. 8. 2014 16:10)
- Glubo
- Člen | 12
Mysteria napsal(a):
<?php public function update ($id, $record) { return $this->find($id)->update($record + ['edited' => new \DateTime()]); } ?>
Případně úplně nejčistší řešení je nastavit ten sloupec v databázi s příznakem ON UPDATE CURRENT_TIMESTAMP.
On někde napsal, jaký db systém používá?
- jiri.pudil
- Nette Blogger | 1032
A nějaký databázový systém snad tuhle funkcionalitu nemá?
Tohle neumí žádný kromě MySQL.
- Pavel Macháň
- Člen | 282
jiri.pudil napsal(a):
A nějaký databázový systém snad tuhle funkcionalitu nemá?
Tohle neumí žádný kromě MySQL.
Třeba Oracle má možnost tuto:
insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);
Případně vytvořit trigger který CURRENT_TIMESTAMP použije a updatne záznam
Editoval Pavel Macháň (19. 8. 2014 19:46)