Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
Zdravím Vás. Mám záhadný problém, že jeden dotaz na DB (typu insert) vytvoří několik nových záznamů, přitom má vytvořit pouze jeden nový záznam. Navíc pokaždé vytvoří jiný počet záznamů (jednou 4, podruhé 5, někdy jen 3 - ale většinou jich vytvoří 5). Klíč podle kterého se řídí počet vytvořených nových záznamů je mi taky záhadou, určuje se to naprosto chaoticky a bez vazby na jakékoliv mě známé hodnoty.
Kód mám nějak takto: if (uri_string_search_control($uri) == true) { // kontroluje se URI na výskyt řetězce "vyhledavani" $words_db = escape($words_to_search); // provede se escape řetězce složeného ze slov určených pro vyhledávání // tady je první dotaz na DB - ten problematický insert $sql = "INSERT INTO fulltext_data (fraze, pocet_dotazu, posledni_dotaz) VALUES ('$words_db','1',NOW())"; query($sql); // tady je druhý dotaz na DB - vyhledávání v DB (tohle funguje naprosto bez problémů) $res = query ("SELECT * FROM pages WHERE match(hlavni_obsah) against ('$words_db') AND aktivni=1"); if (!mysql_num_rows($res)) { $count = 0; } else { $count = mysql_num_rows($res); } // a tady probíhá uložení výsledků vyhledávání do proměnné (opět funguje naprosto bez problémů) $search_results = wrt_search_results($res,$row,$count,$words_to_search); } Tabulka fulltext_data má 4 sloupce: ID - typu INT(6), autoincrement FRAZE - typu TEXT POCET_VYSKYTU - typ INT(6), výchozí hodnota 0 POSLEDNI_VYSKYT - typu DATETIME Pro jistotu i funkce query() a escape() ... tam ale chyba určitě není, u žádného jiného dotazu v mé aplikaci se nic podivného neděje: function query($sql) { $res=@mysql_query($sql); if (!$res) { echo 'INTERNÍ CHYBA při práci s databází'; exit; } return $res; } function escape($str) { $str = trim($str); if(!is_numeric($str)) { $str = sprintf("%s", mysql_real_escape_string($str)); } else { $str = intval($str); } return $str; } Poradí mi někdo kde je chyba ? |
||
pcmanik Profil |
Pardon chybny post, prosim zmazat
|
||
Mufna Profil |
EDIT: Tak tohle by taky měl někdo smazat
pcmanik: na konci toho mého příspěvku tu funkci uvádím ... tam bych ale opravdu problém nehledal |
||
Keeehi Profil |
#4 · Zasláno: 15. 7. 2012, 12:13:43
Mufna:
Vrazte echo "$sql<br>\n"; před query($sql);
1) podíváte se, jestli je v dotazu to, co očekáváte 2) uvidíte, jestli se neprovádí vícekrát nemůže být ještě někde dál v kódu zapomenuté query($sql)? jinak ta escape funkce by se dala zapsat jednodušeji function escape($str) { $str = trim($str); if(!is_numeric($str)) { retrurn mysql_real_escape_string($str); } else { return intval($str); } } |
||
Mufna Profil |
Keeehi:
ano, echo jsem tam dal, a je to v pořádku, tzn.:
1) je tam to co tam být má 2) vypíše se to jenom jednou nemůže být ještě někde dál v kódu zapomenuté query($sql) nerad bych se mýlil, ale opravdu jsem si zkontroloval celý kód včetně requirovaných souborů, a nikde by už být nemělo Ale ejhle, jak jsem tam dal to echo , tak to najednou jde do DB jen jednou :-o ... tak to nechápu. Ale to echo tam mít nechci, takže ho musím odstranit, a pak se to asi zase po****
|
||
Keeehi Profil |
#6 · Zasláno: 15. 7. 2012, 12:27:54
Mufna:
Nepoužíváš někde dál náhodou header("Location: xxx") ?
|
||
Mufna Profil |
Keeehi:
ne Sice to vůbec nechápu, ale najednou to přestalo blbnout. Dal jsem si tam echo před ten problematický dotaz a taky echo za něj, tím to přestalo blbnout, a teď jsem obě echa zase odstranil, a najednou to už neblbne ... tak to ale opravdu nechápu :-o
|
||
Časová prodleva: 11 let
|
0