Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Pobieranie id dla nowego rekordu
Forum PHP.pl > Forum > Przedszkole
k0l3c
Witam, mam skrypt, który wygląda mniej więcej tak:

  1. //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)
  2.  
  3.  
  4. for($i=0;$i<count($dane[0]);$i++) {
  5. if($cecha == true) {
  6. $spr_id = mysqli_query($db,"SELECT * FROM cecha");
  7. $id = mysqli_fetch_assoc($spr_id); //sprawdzam czy w bazie jest już taka cecha, jeśli jest to chcę mieć jej id
  8. if(empty($id['id'])) { //jeśli nie ma takiej cechy to poniżej ją dodaję i ponownie sprawdzam jej id
  9. $dodaj = mysqli_query($db,"INSET INTO dane (id, cecha) VALUES (null, '".$id['id']."')");
  10. $spr_id = mysqli_query($db,"SELECT * FROM cecha");
  11. $id = mysqli_fetch_assoc($spr_id);
  12. }
  13. 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.
  14. }
  15. }
  16.  


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.
k0l3c
Niestety nic to nie zmienia. Do bazy nadal co jakiś czas trafiają rekordy z id = 0 czyli zgodnie z przykładem, który podałem, przeważnie pokazywany jest numer id, jednak nie zawsze.
Natomiast wszystkie inne warunki są spełnione, a gdy dodam wyłącznie dane dla których pojawił się problem, przy ponownym sprawdzeniu wszystko jest ok.
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.