Druhý parametr funkce query
- Facedown
- Člen | 38
Ahoj, je možné jako druhý parametr ve funkci query předat pole? Potřebuji to proto, že potřebuji naplnit dotaz pro DELETE.
Potřebuji udělat něco takového:
$this->database->query($query . rtrim($queryParts, ' OR '), $values);
$query obsahuje v tomto případě DELETE FROM xx WHERE a $queryParts obsahuje něco jako ID = ? OR ID = ?.
Poté, co úspěšně poskládám dotaz, potřebuji jednoduše předat pole jako placeholdery, ovšem dostanu výjimku.
Má otázka tedy zní, je možné jako druhý parametr předat pole? Nebo je zde nějaký jiný způsob jak dosáhnout mnohonásobného odstraňování prvků z databáze?
Děkuji za odpověď.
- David Kudera
- Člen | 455
No mám takový pocit, že můžeš použít
$this->database->table('tableName')->where('id = ? OR id = ?', $id, $id2)->delete();
// ale pokud to má být where jen na víc id, tak spíš bych zkusil IN
$this->database->table('tableName')->where('id IN(?)', [$id, $id2])->delete();
třeba by to mohlo fungovat, nette database nepoužívám, takže jen doufám, že je to správně ;-)
- nanuqcz
- Člen | 822
Ahoj,
jj NetteDB umí formátovat pole, pokud si dobře pamatuju. Tzn z
array(0 => 'foo', 1 => 'bar', 2 => 'baz')
udělá v SQL
('foo', 'bar', 'baz')
. Takže to, co napsal @DavidKudera by
mělo fungovat:
$database->table('tableName')->where('id IN ', [$id, $id2])->delete();
EDIT: Potvrzeno, teď jsem to zkoušel. Dokonce to funguje i bez
IN
, NetteDB si ho tam v případě pole sama doplní:
$database->table('tableName')->where('id', [$id, $id2])->delete();
Takže záleží na tobě, co ti přijde přehlednější.
Editoval nanuqcz (23. 8. 2014 11:20)