//skrypt sprawdza tablice pod kątem schematu, powiedzmy że to tekst o kotach i ma za pomocą regex wydzielić do tablicy $dane[0] wszystko co się zaczyna literami kot (i to działa dobrze) for($i=0;$i<count($dane[0]);$i++) { if($cecha == true) { $spr_id = mysqli_query($db,"SELECT * FROM cecha"); $id = mysqli_fetch_assoc($spr_id); //sprawdzam czy w bazie jest już taka cecha, jeśli jest to chcę mieć jej id $dodaj = mysqli_query($db,"INSET INTO dane (id, cecha) VALUES (null, '".$id['id']."')"); $spr_id = mysqli_query($db,"SELECT * FROM cecha"); $id = mysqli_fetch_assoc($spr_id); } echo $id; // Tu chcę wyświetlić id tej cechy, ale nie zawsze się pokazuje pomimo iż przed chwilą rekord został dodany do bazy, a został, sprawdzałem. } }
Ogólnie to działa dobrze, jednak problemy pojawiają się gdy pętla wykonuje się więcej razy (np. 25 razy).
Wówczas $id losowo bywa puste i zakładam, że po prostu SELECT wykonuje się szybciej niż INSERT, który jest przed nim i nie mam pomysłu jak to dobrze rozwiązać.
Innymi słowy, dodaję rekord i prawdopodobnie sprawdzam jego id zanim jeszcze zdąży zostać dodany do bazy.
Ps. Insert ignore z tylko jednym sprawdzaniem ID, również nie pomaga.