Autor Zpráva
quatzael
Profil
Mám dotaz do databáze:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND část_obce = 'Praha - Nusle'
Funguje to v phpMyAdmin (vrátí 1), ale ne v PHP (vrátí NULL).
Nevíte někdo, kde by mohl být problém?
lionel messi
Profil
quatzael:
Samotný dotaz vyzerá v poriadku, zoskupovanie je podľa mňa v tvojom prípade úplne zbytočné, možno by som však nepoužil diakritiku v názve stĺpca. Ak totiž do on-line nástroja na kontrolu SQL príkazov zadám tvoj dotaz, nestane sa vôbec nič (neukáže ani dobre, ani zle), ale keď vyhodím diakritiku, ukáže syntax správne. Osobne som diakritiku v názve stĺpcu nepoužil nikdy.

Ešte pred zmenou tabuľky skús uzavrieť aspoň názov stĺpca s diakritikou do spätných apostrofov (na českej klávesnici pravý Alt + ý), mne to teraz v tom online nástroji pustilo:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND `část_obce` = 'Praha - Nusle'
Daj vedieť, či pomohlo.
quatzael
Profil
lionel messi:
Sorry, ta diakritika se mi tady objevila náhodou. Normálně jí tam v tom dotazu nemám. Takže je to takhle:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND cast_obce = 'Praha - Nusle'

Ale prostě to v tom PHPku nefunguje..


lionel messi:
a ty uvozovky taky nic stejně nedělaj..
yFang
Profil
quatzael:
Ale prostě to v tom PHPku nefunguje..
A jak to používáš v PHP?
juriad
Profil
Ukaž kód provádějící ten kód v PHP. Jiné dotazy (na stejném místě) ti fungují? Co když úplně zrušíš celou klauzuli WHERE, vrátí to ne-NULL?
quatzael
Profil
yFang, juriad:
$sql = "SELECT COUNT(*) FROM seznam_psc WHERE psc = " . $psc . " AND cast_obce = '" . $obecitem . "'";
$qresult = mysqli_query($db_connect, $sql);   
$row = mysqli_fetch_row($qresult); 

Funguje to když to dám jenom takhle:
$sql = "SELECT COUNT(*) FROM seznam_psc WHERE psc = " . $psc;
$qresult = mysqli_query($db_connect, $sql); 
$row = mysqli_fetch_row($qresult); 



yFang, juriad:
Ještě pro jistotu upřesním, že ten název sloupce je ve skutečnosti obec_cast_obce místo cast_obce. Chtěl jsem to tady zkrátit, aby to nemátlo. Ale snad to nemá vůbec žádnej vliv, že tam jsou dvě podtržítka..
Alphard
Profil
Nedostane se třeba do $psc (které by mimochodem mělo být ukládáno jako řetězec) mezera? Kvůli [#3] moc nevěřím tomu, že ten dotaz v [#1] odpovídá skutečnosti, lepší je vše kopírovat, a ne přepisovat.
yFang
Profil
quatzael:
Zkoušel sis vypsat proměnnou $sql, abys viděl jak dotaz vypadá? Případně zkusit vypsat mysql errory.
quatzael
Profil
yFang:
Právě, že jsem to vypisoval. Ukazuje to tohle:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND `obec_cast_obce` = 'Praha - Nusle'

Error to nevyhazuje žádnej.


Alphard:
psc ukládám jako INTEGER.

Před tím to mám ještě ošetřený takhle:
$psc = (int)str_replace(' ','',$psc);



Vlastně původně bez těch uvozovek (to jsem jen zkoušel na radu Lionela Messiho). Takže takhle je to:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND obec_cast_obce = 'Praha - Nusle'

Píšu to v PSPadu. Formát mám normálně nastavenej na UTF-8.
Nenapadá mě kde by mohla být ta zrada..

Ten SQL dotaz je normálně zkopírovanej. Prve jsem tam upravoval ten název toho sloupce, takže tady vzniklo více variant, ale ta poslední je skutečná jak jí opravdu mám. A prostě to nefunguje
lionel messi
Profil
quatzael:
Skús ešte nejakým spôsobom overiť, či nemáš v PSPade okolo spojovníku medzi „Prahou“ a „Nuslemi“ nedeliteľnú medzeru. Schválne skús nasledovné:
SELECT COUNT(*) FROM seznam_psc WHERE psc = 12000 AND obec_cast_obce LIKE 'Praha%'

Toto by malo fungovať (vráti samozrejme iný výsledok).
Kajman
Profil
quatzael:
ale ne v PHP (vrátí NULL)

Count nevrací nikdy null. Vypište si tedy chybu.
quatzael
Profil
Kajman:
Už jsem to tady psal. Chybu to právě nevypisuje vůbec žádnou.
Je to totální záhada.
juriad
Profil
A když vybereš víc sloupců z databáze? A var_dumpneš si vrácený řádek?
quatzael
Profil
lionel messi:
Teď nejsem u kompu, píšu z mobilu. Zkusím za chvíli.
Ale kdyby tam byla nějaká mezera, tak by to přece nevadilo je to v uvozovkách jako string.
Navíc by to byl problém se syntaxem a to by hodilo error, ne?


juriad:
Nevím co přesně myslíš těch více sloupců. Ten asterisk znamená všechny sloupce, ne?
Já jsem zkoušel si ty proměnný var_dumpnout skoro všechny a vždycky vrátily NULL.
Myslím hlavně proměnný: $qresult a $row.
Teď mě napadá, že jsem nezkoušel var_dumpnout $db_connect, ale to by přece řvalo u toho výpisu mysqli_error.
Navíc hned nad tím mám ten dotaz jen na to PSČ a to funguje..
juriad
Profil
quatzael:
Byla by to mezera, ale jiná, která by neodpovídala tomu, co je v databázi. Count by ale vrátil nulu (0).

Tím jsem chtěl řict, ať zrušíš funkci COUNT a necháš tam jen SELECT * FROM.

Počkej, $qresult je NULL, jsi si jistý? To nikdy nemůže být po provedení mysqli_query.
lionel messi
Profil
quatzael:
Ale kdyby tam byla nějaká mezera, tak by to přece nevadilo je to v uvozovkách jako string.
Nemáš celkom pravdu. Pri porovnávaní reťazcov pomocou = je totiž dôležité, aby sa na chlp presne zhodovali. Praha != praha != praHa, to isté Praha - Nusle != Praha - Nusle (v druhom prípade sú pred spojovníkom 2 medzery) a pod.

Navíc by to byl problém se syntaxem a to by hodilo error, ne?
Na 99,99% nehodilo.


quatzael:
juriad:
Nevím co přesně myslíš těch více sloupců. Ten asterisk znamená všechny sloupce, ne?
Hviezdička sa nevzťahuje k výberu stĺpca, ale k agregačnej funkcii COUNT.

Hoď sem prosím čo najkompletnejší PHP kód.
quatzael
Profil
lionel messi:
No, jenže tu hodnotu Praha - Nusle beru ze selectboxu, který ji tam má vygenerovanou že stejný tabulky..
Je to prostě divný..
pcmanik
Profil
quatzael:
Keď to berieš zo selectboxu, prečo nepoužijes ID namiesto názvu? Bude to ešte aj rýchlejšie.
quatzael
Profil
pcmanik:
Tohle je PHP, ne javascript..
Mám tu hodnotu v proměnný $_POST po odeslání formuláře a potom vloženy jako argument do funkce..


Tak záhada vyřešena!! Mám to ve funkci a zapomněl jsem tam definovat globalní proměnnou pro ten connect: $db_connect
Ale nechápu proč to u toho prvního requestu funguje a u druhýho už ne..
pcmanik
Profil
quatzael:
Spomínal som nejaký javascript? Jednoducho ako value selectu zadas id oblasti. Lenže ako pozerám v tvojom prípade to nepojde keďže nemáš rozdelnú tabuľku oblastí a PSČ. Čo máš mimochodom zlý návrh databázy keďže jedna oblasť môže mať viacero PSČ a takisto jedno PSČ môže prislúchať viacerým oblastiam.
quatzael
Profil
pcmanik:
sorry, já jsem byl nějak myšlenkama v html, že by ten problém mohl nějak souviset se skutečnou hodnotou v selectboxu, že by tam byly nějaký skrytý znaky nebo tak něco.. Tak jsem myslel, že navrhuješ, abych místo atributu name to bral podle id elementu. No nevím co mě to napadlo.

a takisto jedno PSČ môže prislúchať viacerým oblastiam.
To není můj návrh. Takhle jsou prostě podle PSČ rozdělený jednotlivý oblasti v ČR. Musím to mít v databázi udělaný tak jak to odpovídá realitě ne jak by to ve "správném návrhu databáze"..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: