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: 1if (uri_string_search_control($uri) == true) { // kontroluje se URI na výskyt řetězce "vyhledavani" 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: 1 function query($sql) { 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 1function escape($str) { 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: 13 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0