Autor | Zpráva | ||
---|---|---|---|
Majkelju Profil |
#1 · Zasláno: 19. 9. 2012, 10:04:09
Ahoj, tenhle dotaz na chybovou hlášku jsem tu už sice našel a odpovědí je, že je chybně napsaný dotaz do db, můj ale v sql vrátí správný výsledek a nemůžu přijít na to, proč to nejede v php.
$res = $db->query("SELECT `znacka` FROM `zatrideni` WHERE `znacka`='$zatrideni'"); if(!mysql_num_rows($res)){ echo 'Zatřídění v databázi neexistuje!'; } else{ ....kód... } Proměnná $zatrideni se před dotazem vypisuje správně. Ještě bych k tomu měl poddotaz, jestli takhle ta podmínka bude fungovat i pokud to nebude házet chybu jako teď, ale nenajde to žádné řádky. Věděl by někdo co s tím? |
||
Šéva Profil |
#2 · Zasláno: 19. 9. 2012, 10:09:26
Majkelju:
ad1: nejsem si uplně zcela jist,ale mám dojem, že se PHP nelíbí v dotazu tyhle znaky `
ad2: if(mysqli_num_rows($res)>0) { //udělej něco } else { //napiš že nejsou záznamy } |
||
Majkelju Profil |
#3 · Zasláno: 19. 9. 2012, 10:11:53
Šéva: ad1: Ty používám pořád a nikdy s tím problém nebyl :/
ad2: Právě že nejdřív jsem to takhle měl, pak jsem to prohodil, protože už nevím, co bych vyzkoušel :) |
||
Šéva Profil |
#4 · Zasláno: 19. 9. 2012, 10:14:20
Majkelju:
připojení do DB proběhne v pořádku? případně si zkus udělat výpis chybové hlášky $res = $db->query("SELECT `znacka` FROM `zatrideni` WHERE `znacka`='$zatrideni'") or die mysql_error();
|
||
Joker Profil |
#5 · Zasláno: 19. 9. 2012, 10:17:55
Šéva:
Naopak, ty znaky tam patří. Majkelju: Jakou chybu databáze vrátí? Mimochodem, dotaz SELECT `znacka` FROM `zatrideni` WHERE `znacka`='$zatrideni' nedává smysl, přece jediná možná hodnota kterou to může vrátit je ta, která už je v té proměnné $zatrideni.
|
||
Majkelju Profil |
Šéva:
$res = $db->query("SELECT `znacka` FROM `zatrideni` WHERE `znacka`='$zatrideni'") or die(mysql_error($res)); Joker: Právě to mám pro kontrolu, jestli už tam záznam s danou značkou je nebo není. Pokud není, mělo by to vrátit nulu, NULL nebo false, což ještě pořád úplně nevím, přijde mi, že tu každý píše něco jinýho :D |
||
Joker Profil |
#7 · Zasláno: 19. 9. 2012, 10:47:20
Majkelju:
„nějak mi to nevypisuje nic“ To znamená nevypíše nic a normálně pokračuje (tj. na die() vůbec nedojde), nebo nevypíše nic a skončí (tj. spadne do die(), ale nevypíše se žádná chyba)? V první řadě mi přijde divné, že query dělá nějaký objekt, ale zbytek (mysql_num_rows, mysql_error) jsou nativní funkce. Co to je za objekt v $db? Dále, pokud dotaz funguje v databázi a nefunguje z PHP, zaměřil bych se na dvě věci: a) Nesestaví PHP dotaz jinak než je ten očekávaný (a testovaný v DB; to ověřit je snadné, stačí si dotaz sestavit do proměnné a pak zkontrolovat její hodnotu)? b) Nenastala chyba už dříve, zejména při připojení k databázi? „Právě to mám pro kontrolu, jestli už tam záznam s danou značkou je nebo není.“ To jsem si myslel. V tom případě výkonově lepší než vrátit z databáze všechny záznamy a pak je v PHP spočítat je spočítat je už v databázi a vrátit jen jejich počet. Tzn. SELECT COUNT(`znacka`) FROM `zatrideni` WHERE `znacka`='$zatrideni'
|
||
Majkelju Profil |
#8 · Zasláno: 19. 9. 2012, 11:08:02
Joker:
Nevypíše nic a skončí bez vypsání chyby. V $db je $db = new mysqli($server, $uzivatel, $heslo, $jmenoDatabaze); Dotaz to sestaví dobře, jestli chyba nastala už dříve, to si nejsem jist, jak poznám. Nicméně tvůj nápad s COUNT vyřešil můj problém, nemusím použít num_rows, tudíž žádná chyba :) Díky! |
||
Joker Profil |
#9 · Zasláno: 19. 9. 2012, 11:24:37
Majkelju:
„V $db je $db = new mysqli($server, $uzivatel, $heslo, $jmenoDatabaze);“ Aha. V tom případě je problém ten, že se tam kombinují mysqli a mysql funkce. Tím pádem je i logické, že mysql_error nic nevrátí (protože v mysql žádná chyba není) a mysql_num_rows nefungovalo, protože mysqli::query vrací třídu mysqli_result a ne resource mysql result. |
||
Majkelju Profil |
#10 · Zasláno: 19. 9. 2012, 14:34:03
Joker: Vidíš to, tak toho bych se sám nedobral...Něco takovýho mě vůbec nenapadlo, tu aplikaci nás píše víc a já třeba mysqli vůbec nepoužívám...každopádně u cizího kódu předpokládám, že je relativně dobrej a radši tam nic neměním. Takže sáhnout sem bych se bez tohohle infa neodvážil :)
|
||
Časová prodleva: 12 let
|
0