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
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
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

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: