Dynamický dotaz do databáze – jak na parametry? – There are more placeholders than passed parameters
- nettolog
- Člen | 68
Ahoj, mám takový dotaz do db:
$q = $this->database->query("SELECT * FROM items WHERE CATEGORY LIKE ?", $cats[0]);
To je v pořádku, ale dotaz musí počítat s tím, že kategorií budu hledat víc, třeba dvě:
$q = $this->database->query("SELECT * FROM items WHERE CATEGORY LIKE ? AND CATEGORY LIKE ?", $cats[0], $cats[1]);
Ale dynamicky. Napadlo mě teda podle count($cats) poskládat dotaz tak, aby odpovídal, tzn. příklad:
$cats = array("prvni", "druha", "treti");
$select = "CATEGORY LIKE ? AND CATEGORY LIKE ? AND CATEGORY LIKE ?";
$q = $this->database->query("SELECT * FROM items WHERE $select", $cats);
což mi v případě, kdy je v $cats
více než jedna položka,
vrátí: There are more placeholders than passed parameters. Jak bych měl dotaz
poskládat, aby to prošlo a nemusel jsem dávat do $select
rovnou
(ne)ošetřená data? Díky za pomoc
Editoval nettolog (23. 9. 2015 22:59)
- David Matějka
- Moderator | 6445
pouzij queryArgs, ktere akceptuje jako druhy argument pole parametru pro dotaz
- nettolog
- Člen | 68
Dík moc, to jsem hledal. Čistý dotaz bez dalších parametrů jde v pohodě jak potřebuju, ale tenhle neprojde se stejnou chybou:
$this->database->queryArgs("SELECT * FROM items WHERE $select LIMIT ? OFFSET ?", $cats, $params['show'],(($params['page'] - 1) * $params['show']));
Můžu se zeptat, jak přesně to funguje? Našel jsem jen popis vstupních parametrů v API. :(
EDIT: aha, už mi to došlo, všechny parametry jen do jednoho pole, chápu, DÍK!
Editoval nettolog (23. 9. 2015 23:17)