Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zwracanie id utworzonego rekordu.
Salur
post
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 28.12.2014

Ostrzeżenie: (20%)
X----


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





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


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.

Ten post edytował Skie 11.08.2015, 17:56:04
Go to the top of the page
+Quote Post
goartur
post
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


  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;
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Co to jest, PDO?
http://php.net/manual/pl/pdo.lastinsertid.php

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

Ten post edytował viking 11.08.2015, 18:34:39
Go to the top of the page
+Quote Post
Salur
post
Post #5





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 28.12.2014

Ostrzeżenie: (20%)
X----


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. }
Go to the top of the page
+Quote Post
markuz
post
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


  1. $db->insert_id
  1. UPDATE player SET gold = (gold - 1000), clan_id = X WHERE ...


Ten post edytował markuz 11.08.2015, 18:54:13
Go to the top of the page
+Quote Post
Salur
post
Post #7





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 28.12.2014

Ostrzeżenie: (20%)
X----


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?
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


  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.

Ten post edytował viking 11.08.2015, 19:09:25
Go to the top of the page
+Quote Post
Skie
post
Post #9





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


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





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 28.12.2014

Ostrzeżenie: (20%)
X----


Dziekuję wszystkim za rady.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 06:23