Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zwracanie id utworzonego rekordu.
Forum PHP.pl > Forum > Przedszkole
Salur
Witam, jak mogę zwrócić id utworzonego rekordu? Skrypt tworzy klan i zapisuje go do tabeli klan a nastepnie chce zaktualizowac w kolumnie clan_id w tabeli player własnie to id stworzonego klanu. Co robię źle?

PS: Czy mogę te zapytania dodatkowo zoptymalizowac?

  1. // sprawdzanie czy klan istnieje/
  2.  
  3. $x = $db->select_single('SELECT * FROM klan WHERE name = '.$_POST['nameKlan'].'');
  4.  
  5. if($x > 0){
  6.  
  7. echo 'Klan z taką nazwą już istnieje!';
  8.  
  9. } else {
  10.  
  11. // dodanie klanu do bazy //
  12. $db->query("INSERT INTO klan (name,owner_id,osob,skarbiec,skarbiec_gold,punkty) VALUES ('$nameKlan','".$player['id']."', '1', '0','10','0')");
  13.  
  14.  
  15. // zabranie uzytkownikowi kasy za załozenie klanu//
  16. $db->query("UPDATE player SET gold = (gold - 1000) WHERE id = '".$player['id']."'");
  17.  
  18.  
  19. !!// i teraz TU muszę dodac to id które jest w nowo stworzonym klanie//!!
  20.  
  21. $db->query("UPDATE player SET clan_id = 'idNowegoKlanu' WHERE id = '".$player['id']."'");
  22.  
  23. echo 'Założyłeś klan o nazwie: <b>'.$nameKlan.'</b>
  24.  
  25. }
  26.  
Skie
Po wstawieniu rekordu z klanem, zrób SELECTa który pobierze dane odnośnie utworzonego klanu, w tym jego id. Jako warunek WHERE możesz użyć owner_id, zakładając, że jeden użytkownik może być twórcą tylko jednego klanu. Jesli nie to wtedy WHERE pobierz po nazwie, skoro jest ona unikalna.
goartur
  1.  
  2. $db->query("INSERT INTO klan (name,owner_id,osob,skarbiec,skarbiec_gold,punkty) VALUES ('$nameKlan','".$player['id']."', '1', '0','10','0')");
  3.  


  1. $id = $db->query("SELECT id FROM klan WHERE name='"$nameKlan"' AND owner_id='".$player['id']."'")->fetch_object();
  2.  
  3.  
  4. echo 'Id klanu to: '. $id->id;
viking
Co to jest, PDO?
http://php.net/manual/pl/pdo.lastinsertid.php

I postaraj się też robić wszystko w jednym zapytaniu.
Salur
Viking

Jest to mysqli.

W jaki sposób mogę połączyć te zapytania w jedno? Mógłbym prosić cię abyś pokazał, bo nie wiem jak połaczyć update, insert itp w jedno zapytanie.

Oto cały kod:

  1. if(!empty($nameKlan)){
  2.  
  3. if($player['gold'] >= 1000 and $player['level'] >= 15){
  4.  
  5. $x = $db->select_single('SELECT * FROM klan WHERE name = "'.$nameKlan.'"');
  6.  
  7. if($x > 0){
  8.  
  9. echo 'Klan z taką nazwą już istnieje!';
  10.  
  11. } else {
  12.  
  13. $newClan = $db->query("INSERT INTO klan (name,owner_id,osob,skarbiec,skarbiec_gold,punkty) VALUES ('$nameKlan','".$player['id']."', '1', '0','10','0')");
  14.  
  15. $idClan = $db->select_single('SELECT * FROM klan WHERE name = "'.$nameKlan.'"');
  16.  
  17. if(empty($newClan)){
  18.  
  19. $db->query("UPDATE player SET gold = (gold - 1000) WHERE id = '".$player['id']."'");
  20.  
  21. $db->query("UPDATE player SET clan_id = '".$idClan['id']."' WHERE id = '".$player['id']."'");
  22.  
  23. echo 'Założyłeś klan o nazwie: <b>'.$nameKlan.'</b>
  24. <br>Aby wejść do klanu kliknij: <a href="?s=klan">KLAN</a>';
  25. }
  26.  
  27. }
  28.  
  29. } else {
  30.  
  31. echo 'Posiadasz za mało złota lub masz za niski poziom.';
  32.  
  33. }
  34.  
  35. }
markuz
  1. $db->insert_id
  1. UPDATE player SET gold = (gold - 1000), clan_id = X WHERE ...
Salur
To rozumiem, jeżeli jest update i update to potrafie to połączyć lecz, viking napisał że wszystko na jednym zapytaniu. Wgl się da połączyć np. insert, update, select do jednego zapytania? Bo pierwsze słysze. Czy po prostu źle zrozumiałem?
viking
  1. UPDATE player SET gold = (gold - 1000), clan_id = `dane` WHERE...


https://dev.mysql.com/doc/refman/5.7/en/update.html

Możesz nawet robić w update select czy łączyć z innymi tabelami. Poczytaj komentarze do dokumentacji, da ci to podgląd możliwości.
Skie
Nie ma sensu, by łączyć te zapytania (SELECT, UPDATE, INSERT) w jedno skomplikowane wielkie coś korzystając z samego PDO. Traci się wtedy dobrodziejstwa jakie wynikają z PHP cache i SQL cache, które znacznie poprawią wydajność niż połączenie paru zapytań w jednego frankensteina. Jeśli zatem należy dawać jakieś rady odnośnie implementacji - to dodanie PHP cache - żadnego łączenia.
Salur
Dziekuję wszystkim za rady.
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.