Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Pobieranie id dla nowego rekordu
k0l3c
post 30.11.2020, 15:35:02
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.11.2020

Ostrzeżenie: (0%)
-----


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.

Ten post edytował k0l3c 30.11.2020, 15:36:57
Go to the top of the page
+Quote Post
viking
post 30.11.2020, 16:06:25
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://www.php.net/manual/en/mysqli.insert-id.php


--------------------
Go to the top of the page
+Quote Post
k0l3c
post 30.11.2020, 21:25:12
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 30.11.2020

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 08:43