Oznámení
Chybné složení jediné podmínky s nerovnítkem
před 8 lety
- Václav M.
- Člen | 34
PHP: 5.3.8
DIBI: 1.5-rc1 (faf4445)
Dnes jsem potřeboval do jednoho výběrového dotazu vložit podmínku s !=, kdy jsem měl přibližně následující pole:
$Dotaz_Where = array("`Jmeno_ID` != %s", $_SESSION[PREZENTACE_Nazev]['Spravce']);
použité do přibližně následujícího příkazu:
$Vysledek = dibi::fetchAll("SELECT `Jmeno`, `Jmeno_ID` FROM `Uzivatele_Jmeno` WHERE ", $Dotaz_Where);
A stalo se to, že pole s podmínkou zpracoval špatně a výsledné SQL bylo takovéto:
SELECT `Jmeno`, `Jmeno_ID`
FROM `Uzivatele_Jmeno`
WHERE '`Jmeno_ID` != %s',
'4a5y4a521s7o1s7ocia25i614s3t1s4f4s965i5z6k53606t5e445i465e4ici8xci7o604t5i464s'
Potom jsem ten dotaz stejně musel celý přepsat, protože jsem zjistil, že výsledný výběr neodpovídal tomu, co jsem chtěl vlastně vybrat.
před 8 lety
- Milo
- Nette Core | 1119
Dotaz se poskládal logicky správně ikdyž jinak než bys chtěl:
$Dotaz_Where = array(
array('[Jmeno_ID] != %s', $_SESSION[PREZENTACE_Nazev]['Spravce']),
);
$Vysledek = dibi::fetchAll('SELECT [Jmeno], [Jmeno_ID] FROM [Uzivatele_Jmeno] WHERE %and', $Dotaz_Where);
před 8 lety
- Václav M.
- Člen | 34
No, použití toho modifikátoru %and mne tedy nenapadlo, protože jsem měl zato, že je pouze pro případy, kdy je těch podmínek více najednou. A čistě logicky by to tak být mělo – nebo ne?
před 8 lety
- HosipLan
- Moderator | 4693
Ne. Snaž se používat fluent. Tohleto jsou přehrocenosti.
před 8 lety
- Václav M.
- Člen | 34
Přehrocenost?
A jen tak mimochodem, k fluentu bych potřeboval pár základních příkladů, abych viděl, jak co použít. Já totiž nejsem z dokumentace vytvořené z PHPDoc komentářů schopen to přečíst … pokud k tomu není slušný příklad.
A proto když jsem začal připravovat dokumentaci k frameworku VMaX-ZnaK, tak je hlavní pozornost věnována právě příkladům – no, taky bych to mohl konečně dopsat, ale vždycky dostanu nějaký nápad na nějaké vylepšení a …
Editoval Václav M. (28. 10. 2011 13:01)
před 8 lety
- Václav M.
- Člen | 34
Dík. Snad to zatím stačit bude.
před 8 lety
- Milo
- Nette Core | 1119
Václav M. napsal(a):
No, použití toho modifikátoru %and mne tedy nenapadlo, protože jsem měl zato, že je pouze pro případy, kdy je těch podmínek více najednou. A čistě logicky by to tak být mělo – nebo ne?
Čistě teoreticky by dibi mohlo předvídat, jaký modifikátor použít, když je parametr pole. Zrovna v tomhle případě je to jednoduché, ale obecně by byla potřeba hlubší lexikální analýza.
Navíc když si všimneš, nepoužil jsem jednoduché pole s podmínkou jako
ty, ale pole v poli. Kdyby zůstalo jednoduché, je potřeba modifikátor
%sql
. Takže interpretace pole taky není vždy jednoznačna.
A jednu podmínku můžeš vždy napsat rovnou jako SQL bez modifikátoru.
$Vysledek = dibi::fetchAll('
SELECT
[Jmeno],
[Jmeno_ID]
FROM
[Uzivatele_Jmeno]
WHERE
[Jmeno_ID] != %s', $_SESSION[PREZENTACE_Nazev]['Spravce'], '
');