Proměnný název sloupce v kombinaci s IN()
- deextaar
- Člen | 4
Zdravím,
chtěl bych se zeptat, používám v databaseCore místo názvu tabulek,
sloupců, zástupný symbol ?name.
Neměl jsem s tím dosud problém, nicméně při použití v kombinací s IN
() dochází ke špatnému dosazení hodnot.
Pokud použiji WHERE ?name IN(?), je po spuštění z nějakého důvodu
dosazeno WHERE id
IN ((?) AND (?)) .
Pokud ?name nahradím přímo názvem sloupce, jsou hodnoty dosazeny jak mají
WHERE id IN(?, ?) .
Je toto nějaká chyba, nebo dělám něco špatně ? Tabulku dosazuji také přes zástupný symbol, ale to na funkci vliv nemá.
Díky
Editoval deextaar (2. 10. 2021 22:48)
- deextaar
- Člen | 4
Michal Kumžák napsal(a):
Můžeš sem dát celý ten zdroj toho sql dotazu? A hodnoty co do něj posíláš.
Jasné.
Například při takovémto použití to dělá. Pokud místo ?name dám rovnou
název sloupce, dotaz je v pořádku
$arrayWithValues=array(1,2);
$nazevSloupce="user_id";
bdump($this->database->query("SELECT * FROM users WHERE ?name IN(?)",$nazevSloupce,$arrayWithValues));
- romco
- Člen | 4
deextaar napsal(a):
Michal Kumžák napsal(a):
Můžeš sem dát celý ten zdroj toho sql dotazu? A hodnoty co do něj posíláš.
Jasné.
Například při takovémto použití to dělá. Pokud místo ?name dám rovnou název sloupce, dotaz je v pořádku$arrayWithValues=array(1,2); $nazevSloupce="user_id"; bdump($this->database->query("SELECT * FROM users WHERE ?name IN(?)",$nazevSloupce,$arrayWithValues));
Ahoj no neviem či to bude zrovna najčistejší kód ale skús tento zápis , lebo výčty , teda IN() sa zapisujú inak
$this->database->query("SELECT * FROM users WHERE" , [$nazevSloupce => $arrayWithValues]);
Editoval romco (5. 10. 2021 1:24)
- deextaar
- Člen | 4
Ano díky, tímto způsobem to funguje. Nicméně právě v dokumentaci je hned ze začátku uvedeno použití IN způsobem, který zde používám https://doc.nette.org/…atabase/core#… a nevidím úplně důvod proč by to s sloupcem jako proměnnou nemělo fungovat.
- romco
- Člen | 4
deextaar napsal(a):
Ano díky, tímto způsobem to funguje. Nicméně právě v dokumentaci je hned ze začátku uvedeno použití IN způsobem, který zde používám https://doc.nette.org/…atabase/core#… a nevidím úplně důvod proč by to s sloupcem jako proměnnou nemělo fungovat.
Lebo ?name IN(?) nie je to isté ako výraz stlpec IN(?)
Takto vyhodnotí tie query výrazy
SELECT * FROM tab WHERE ?name IN(?) // "SELECT * FROM tab WHERE [meno] IN((?) AND (?))" - toto je čo skúšaš, takto to vyhodnotí a preto ti to nejde
SELECT * FROM tab WHERE ?name = ? // "SELECT * FROM tab WHERE [meno] = ?"
SELECT * FROM tab WHERE meno = ? // "SELECT * FROM tab WHERE meno = ?"
SELECT * FROM tab WHERE meno IN(?) // "SELECT * FROM tab WHERE meno IN(?, ?)"
SELECT * FROM tab WHERE , [ $nazovStlpca => $pole] // "SELECT * FROM tab WHERE ([meno] IN (?, ?))"