Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDO lastInsertId();
MESSIAH :)
post 23.07.2020, 11:09:19
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Uzywam PDO. Uzytkownik dodaje swoje konto. Generuje link na podstawie id ostatniego usera poprzez lastInsertId();. Mam jakis blad w query i wpis nie zostaje dodany do bazy danych lecz ostatnie ID wciaz rosnie. Z 3 000 uroslo do 80 000 - mozliwe ze boty. Jak moge sprawdzic ostatnie dodane ID do bazy bez dodawania wpisu do BD? Chcialbym podszkolic wiedze w PDO bo wedlug mnie skoro jest blad w query i wpis nie zostal dodany to ID nie powinno rosnac. Jacys experci na sali?


--------------------
Go to the top of the page
+Quote Post
trueblue
post 23.07.2020, 11:14:17
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Najprościej na bazie:
  1. SHOW CREATE TABLE nazwa_tabeli

Na końcu będzie info o AUTO_INCREMENT


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 23.07.2020, 11:35:06
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Cytat(trueblue @ 23.07.2020, 12:14:17 ) *
Najprościej na bazie:
  1. SHOW CREATE TABLE nazwa_tabeli

Na końcu będzie info o AUTO_INCREMENT

W innoDB jak wykonasz query nawet jesli ma błąd i nie doda się wiersz to AI i tak podbije się +1.

W MyISAM ten feature nie występuje.
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 11:46:43
Post #4





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(Pyton_000 @ 23.07.2020, 11:35:06 ) *
W innoDB jak wykonasz query nawet jesli ma błąd i nie doda się wiersz to AI i tak podbije się +1.

W MyISAM ten feature nie występuje.

Wczoraj czytalem o tym. Czyli ze moje ID jest podbijane od samego query? Jak sprawdzic last AI? Mam dostep do PHPMyAdmin oraz mysql w konsoli

Cytat(trueblue @ 23.07.2020, 11:14:17 ) *
Najprościej na bazie:
  1. SHOW CREATE TABLE nazwa_tabeli

Na końcu będzie info o AUTO_INCREMENT

No i pokazuje mi 2766
Juz nie rozumiem dlaczego PDO zwraca wyzsza wartosc?

Ten post edytował MESSIAH :) 23.07.2020, 11:43:42


--------------------
Go to the top of the page
+Quote Post
trueblue
post 23.07.2020, 11:50:23
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A przed tym nieudanym INSERT nie ma innego?


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 12:01:20
Post #6





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(trueblue @ 23.07.2020, 11:50:23 ) *
A przed tym nieudanym INSERT nie ma innego?

Jak moge sprawdzic wszytskie AI dla wszystkich tabel?


--------------------
Go to the top of the page
+Quote Post
trueblue
post 23.07.2020, 12:04:33
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


  1. SELECT TABLE_NAME, AUTO_INCREMENT
  2. FROM information_schema.TABLES
  3. WHERE TABLE_SCHEMA = "nazwa_bazy"


--------------------
Go to the top of the page
+Quote Post
viking
post 23.07.2020, 12:12:06
Post #8





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

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


A dlaczego według ciebie id miało by nie rosnąć? Wyobraź sobie sytuację z kilkoma transakcjami na raz. Wyłóżylo by to cały system i ACID.


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 16:03:44
Post #9





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(trueblue @ 23.07.2020, 12:04:33 ) *
  1. SELECT TABLE_NAME, AUTO_INCREMENT
  2. FROM information_schema.TABLES
  3. WHERE TABLE_SCHEMA = "nazwa_bazy"

Ok znalazlem. Wiec wyglada na to ze pierwsze query jest z bledem i przeskakuje na drugie query gdzie pobiera ID z tablicy logow. Cyfry sie zgadzaja tylko dlaczego tak sie dzieje? Skoro query jest wadliwe to powinno sie zapauzowac wykonywanie nastepnego.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 23.07.2020, 16:07:58
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(MESSIAH :) @ 23.07.2020, 17:03:44 ) *
Skoro query jest wadliwe to powinno sie zapauzowac wykonywanie nastepnego.

A niby dlaczego? Jeśli drugie może się wykonać bez problemu, kod nie przerywa się, to się wykonuje.


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 16:22:44
Post #11





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(trueblue @ 23.07.2020, 16:07:58 ) *
A niby dlaczego? Jeśli drugie może się wykonać bez problemu, kod nie przerywa się, to się wykonuje.

Zawsze bylem przekonany ze PHP i MYSQL wykonuje sie tak samo. Teraz odkrylem ze jednak nie. Mam taki blad:

Cytat
Warning trigger [512] SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups, balance, timezone) VALUES ' at line 3 on


Jak mam to ugryzc?


--------------------
Go to the top of the page
+Quote Post
nospor
post 23.07.2020, 16:25:37
Post #12





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




z racji ze nie raczyles podac zapytania, ktore generuje ten blad, to strzelam ze chodzi o slowo kluczowe GROUPS ktore jest zastrzezone
https://dev.mysql.com/doc/refman/8.0/en/keywords.html

zacznik uzywac `` do nazw kolumn


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 16:30:24
Post #13





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(nospor @ 23.07.2020, 16:25:37 ) *
z racji ze nie raczyles podac zapytania, ktore generuje ten blad, to strzelam ze chodzi o slowo kluczowe GROUPS ktore jest zastrzezone
https://dev.mysql.com/doc/refman/8.0/en/keywords.html

zacznik uzywac `` do nazw kolumn

Czy te `` mam uzywac w zapytaniu czy w parametrach gdzie sa definiowane? Czy to jest teraz taki wymog MYSQL 8 questionmark.gif Wczesniej uzywalem wersji 5 cos i lykalo jak szalone bez zadnego bledu.


--------------------
Go to the top of the page
+Quote Post
nospor
post 23.07.2020, 16:32:21
Post #14





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Jakbys raczyl zajrzec do linka co podalem, to bys zobaczyl ze GROUPS pojawilo sie jako reserved wlasnie od mysql8. zas samo `` uzywa sie od wiekow

`` masz uzywac wszedzie tam gdzie uzywasz nazw kolumn oraz tabel


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 16:36:25
Post #15





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(nospor @ 23.07.2020, 16:32:21 ) *
Jakbys raczyl zajrzec do linka co podalem, to bys zobaczyl ze GROUPS pojawilo sie jako reserved wlasnie od mysql8 zas samo `` uzywa sie od wiekow

`` masz uzywac wszedzie tam gdzie uzywasz nazw kolumn oraz tabel

O kurcze nie zajazylem tego powiazania - szukalem raczej informacji o apostrofie. Czyli mam w zapytaniu zarezerwowana nazwe GROUPS. OK traz rozumiem. Mam w zapytaniu zdefiniowane kilka tabel i musze kazda z osobna potrakotwac tym apostrofem czy jest jakis skrot na zawarcie ich w jednym?


--------------------
Go to the top of the page
+Quote Post
nospor
post 23.07.2020, 16:38:28
Post #16





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




kazda z osobna


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 23.07.2020, 16:42:43
Post #17





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

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


Jeszcze z tego co piszesz wykonujesz kilka zależnych od siebie zapytań bez jakiejkolwiek transakcji i przechwytywania wyjątków. Dlatego lecą z błędami dalej.


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 17:04:17
Post #18





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(nospor @ 23.07.2020, 16:38:28 ) *
kazda z osobna

Dziala wielkie dzieki bro.
Zastanawiam sie czemu PDO nie wywalilo bledu ze uzywam zerezerwowanej nazwy. PHP nie obsluguje chyba tego bledu jeszcze.


--------------------
Go to the top of the page
+Quote Post
viking
post 23.07.2020, 17:17:23
Post #19





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

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


https://www.php.net/manual/en/pdo.error-handling.php
Nie wyświetla bo tego nie ustawiłeś.


--------------------
Go to the top of the page
+Quote Post
MESSIAH :)
post 23.07.2020, 18:26:42
Post #20





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

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


Cytat(viking @ 23.07.2020, 17:17:23 ) *
https://www.php.net/manual/en/pdo.error-handling.php
Nie wyświetla bo tego nie ustawiłeś.

Mam ustawione i zapisuje sie to w BD. Ale nic nie bylo napisane ze uzywam zarezerwowanej nazwy tylko ze jest blad w query.


--------------------
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: 28.03.2024 - 11:45