Autor Zpráva
pajadvorak
Profil
Mám jednoduchý dotaz:

$result = mysql_query("select * from tabulka WHERE cislo='201622356' ORDER BY id ASC");

Takto chodilo několik měsíců. Najednou to přestalo fungovat a to tím způsobem, že to nevrací nic. Ani mysql_num_rows($result); nevrátí 0 výsledků, prostě nic.
Po dlouhém pátrání jsem přišel na to, že když řazení "order by id asc" dám pryč, tak to výsledek vrátí v pořádku.

mysql_error($result); => nevypíše žádnou chybu
print_r($result); => nevypíše nic
var_dump($result); => vypíše "bool(false)"

A přes phpmyadmin dotaz výše funguje v pořádku a vypíše co má (select * from tabulka WHERE cislo='201622356' ORDER BY id ASC).


Prosím, napadá někoho nápad, čím to je, že to v php nefunguje?
Moc děkuji.
Taps
Profil
Nemas promenou result jeste nekde jinde v kodu?
Kajman
Profil
pajadvorak:

Funkci mysql_error se dává jako parametr identifikátor připojení, ne identifikátor sady dat. Také je potřeba vrácený string vypsat. Zkuste tedy v případě chyby raději

echo mysql_error();
pajadvorak
Profil
Taps:
nemám, pouze jednou


Kajman:
ok, teď už mi to hlásí tuhle chybu:
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay
Kajman
Profil
Pokud ten dotaz je opravdu jen z jedné tabulky (není to view s joiny) a omezení na číslo neodpovídá příliš mnoho řádků, zkusil bych v PMA
ANALYZE TABLE tabulka

Pokud to má vrátit moře řádků, zavolejte před tím dotazem ještě zmíněné povolení obrovských dotazů
mysql_query("SET SQL_BIG_SELECTS=1");
pajadvorak
Profil
Kajman:
Tak jsem zjistil, že byl problém v tom, že nebyl adekvátní index pro tento dotaz a procházení 250 000 řádků prostě server nezvládl (nastavení hostingu). Děkuji za pomoc.

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: