Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Błędne wyniki przy dużej ilości select
Forum PHP.pl > Forum > PHP
pks
Witam!
Posiadam sobie formularz z 3 polami, w ktorych mozna wpisywać dane. Po wciśnięciu SUBMIT funkcja sprawdza czy te pola o takich danych nie istnieją już w bazie, a jak nie, to je dodaje. Wszystko działa pięknie i ładnie, ale ostatnio zrobiłem sobie funkcję masowego dodawania danych do tych 3 pól z pliku.
Działa ona w oczywisty sposób rozbijania każdej linijki tego pliku na osobne dane i przekazywania ich do funkcji. I tu się pojawia problem, przy np. 500 linijkach w pliku oczywiście dane się dodają, ale funkcja nie sprawdza mi czy już istniały wcześniej w bazie i przez to mam duplikaty niektórych danych.

Dlaczego tak się dzieje? Czy przy dużej ilości zapytań SELECT funkcja pomija niektóre z nich? (istnienie danych w bazie równiez sprawdzam SELECTem)

Pozdrawiam
nospor
oczywiscie, przy wiecej niz 499 rekordach mysql szaleje.... winksmiley.jpg

a na powaznie: masz zly kod i tyle - pokaz go, to ci pomozemy go naprawic
pks
smile.gif
oto funkcja dodająca te dane, $fields to nazwy poszczegolnych pol, $data to tablica z danymi, a mltab to tablica z zaznaczonymi listami subskrypcji.
Wszystko dziala git, ale jak wywołam tą funkcje duuuuzo razy to wariuje smile.gif
Kod
public function addSub($fields, $data, $mltab = NULL) {
         if($data['email'] && $data['nick'] && $data['phone'])
             $ex = (dbfieldexists(TABLE_SUBS, 'email', $data['email']) || dbfieldexists(TABLE_SUBS, 'phone', $data['phone']));
         else if($data['email'] && $data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'email', $data['email']);
         else if($data['phone'] && $data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'phone', $data['phone']);
         else if($data['nick'])
             $ex = dbfieldexists(TABLE_SUBS, 'nick', $data['nick']);
        
         try {
             if($ex == false) {
                     dbinsert(TABLE_SUBS, $fields, $data);
                    
                     $result = dbselect(TABLE_SUBS, array('id'), NULL, 'id desc', '0, 1');                        
    
                     if($mltab)
                         foreach($mltab as $lis)
                             dbinsert(TABLE_ML_SUBS, array('ml_id', 'sub_id'), array($lis, $result[0]['id']));
                    
                     set_message('Pomyślnie dodano subskrybenta!');
             }
             else throw new Exception('Nie dodano niektórego(-ych) użytkowników, gdyż dane się powtarzają');    
             return true;
         } catch(Exception $e) {
             //
             return false;
         }
     }


a tutaj funkcja sprawdzająca czy pole istnieje w bazie:
Kod
public static function fieldExists($table, $field, $value) {
         try {
             $result = dbselect($table, array($field), "`$field` = '$value'");
             if($result[0][$field]) return true;
             else return false;
         } catch(Exception $e) {
             //
             return false;
         }
     }


pozdrawiam smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.