Autor Zpráva
Majkelju
Profil
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
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
Šé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
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
Šé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));
nějak mi to nevypisuje nic...v tom tvaru, jak jsi to napsal to házelo chybu. Připojit do db by se to mělo, všechny ostatní dotazy na stránce fungujou.
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
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
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
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
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 :)

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:

0