Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zapytanie nie działa
castagir
post 30.12.2014, 13:35:53
Post #1





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

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


Witam

Mam taki problem. Chcę podczas rejestracji wrzucić podane informacje przez użytkownika do bazy danych. Następnie na podstawie tych informacji chcę pobrać id, które jest auto incremente, aby umieścić je w innych tabelach, które będą się odnościć do uzytkownika.


Próbowałem już wielu sposobów na sformułowanie pytania. Dodawałem zapostrofy, cuydzysłowy, kasowałem AND, dodawałem OR lub nic nie wstawiałęm pomiedzy parametrami - i nic. Nie wiem o co chodzi. Dwa pytania działają tak jak nalezy, tylko drugie w kolejności nic nie robi. Nie wyskakuje nawet żaden błąd, chociaż mam ustawione Exeptions.
  1. $nazwa= '1';
  2. $email= '2';
  3. $haslo1='3';
  4.  
  5.  
  6. $data = date("d.m.o"); // data rejestracji
  7. $pytanie = $polaczenie->prepare("INSERT INTO `endo_uzytkownicy` (`nazwa_uzytkownika`, `email_uzytkownika`, `haslo_uzytkownika`, `data_rej_uzytkownika`)
  8. VALUES ('".$nazwa."', '".$email."', '".sha1($haslo1)."', '".$data."')");
  9. if ($pytanie->execute()) {
  10. $wynik_zapis_bd = 'dobrze'; }
  11. else {
  12. $wynik_zapis_bd =
  13. '<p class="blad">Nie udało się zarejestrować nowego użytkownika.<br />
  14. Spróbuj ponownie później lub zgłoś to do obsługi technicznej.</p><br />'; }
  15. if ($wynik_zapis_bd === 'dobrze') {
  16. $pytanie = $polaczenie->prepare("SELECT id_uzytkownika FROM `endo_uzytkownicy` WHERE:
  17. nazwa_uzytkownika=:param1 email_uzytkownika=:param2 haslo_uzytkownika=:param3 LIMIT 1");
  18. $pytanie->bindValue(':param1', $nazwa, PDO::PARAM_STR);
  19. $pytanie->bindValue(':param2', $email, PDO::PARAM_STR);
  20. $pytanie->bindValue(':param3', sha1($haslo1), PDO::PARAM_STR);
  21. if ($pytanie->execute()) {
  22. $wynik_zapis_bd = 'dobrze';
  23. while ($wynik = $pytanie->fetch(PDO::FETCH_ASSOC) {
  24. $id = $wynik['id_uzytkownika']; } }
  25. else {
  26. $wynik_zapis_bd =
  27. '<p class="blad">Nie udało się zarejestrować nowego użytkownika.<br />
  28. Spróbuj ponownie później lub zgłoś to do obsługi technicznej.</p><br />'; } }
  29.  
  30. if ($wynik_zapis_bd === 'dobrze') {
  31. $pytanie = $polaczenie->prepare("INSERT INTO `endo_uzytkownicy_osobowe` (`id_uzytkownika`, `nazwa_uzytkownika`)
  32. VALUES (':param1', ':param2')");
  33. $pytanie->bindValue(':param1', $id, PDO::PARAM_STR);
  34. $pytanie->bindValue(':param2', $nazwa, PDO::PARAM_STR);
  35. if ($pytanie->execute()) {
  36. $wynik_zapis_bd = 'dobrze'; }
  37. else {
  38. $wynik_zapis_bd =
  39. '<p class="blad">Nie udało się zarejestrować nowego użytkownika.<br />
  40. Spróbuj ponownie później lub zgłoś to do obsługi technicznej.</p><br />'; } }
  41.  
  42. echo $wynik_zapis_bd;


Ten post edytował castagir 30.12.2014, 13:38:16
Go to the top of the page
+Quote Post
SpiritCode
post 30.12.2014, 13:46:42
Post #2





Grupa: Zarejestrowani
Postów: 167
Pomógł: 35
Dołączył: 29.12.2014
Skąd: Otwock

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


Po WHERE masz ':'
Go to the top of the page
+Quote Post
Turson
post 30.12.2014, 13:49:01
Post #3





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


1. Pierwszego zapytania nie bindujesz. Czemu?
2. Do pobrania tego id wystarczy http://php.net/manual/en/pdo.lastinsertid.php - nie musisz wtedy szukac tego ręcznie.
3. Błąd jest tutaj
  1. SELECT id_uzytkownika FROM `endo_uzytkownicy` WHERE:
  2. nazwa_uzytkownika=:param1 email_uzytkownika=:param2 haslo_uzytkownika=:param3 LIMIT 1

WHERE:
poza tym tutaj nie masz nawet koniunkcji wieć o czym mowa...


Cytat
Nie wyskakuje nawet żaden błąd, chociaż mam ustawione Exeptions.

Może i masz wyjątki, ale żeby je złapać, to zapytania muszą być w bloku try{}

Ten post edytował Turson 30.12.2014, 13:50:07
Go to the top of the page
+Quote Post
castagir
post 30.12.2014, 13:57:00
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

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


Cytat(Turson @ 30.12.2014, 13:49:01 ) *
1. Pierwszego zapytania nie bindujesz. Czemu?
2. Do pobrania tego id wystarczy http://php.net/manual/en/pdo.lastinsertid.php - nie musisz wtedy szukac tego ręcznie.
3. Błąd jest tutaj
  1. SELECT id_uzytkownika FROM `endo_uzytkownicy` WHERE:
  2. nazwa_uzytkownika=:param1 email_uzytkownika=:param2 haslo_uzytkownika=:param3 LIMIT 1

WHERE:
poza tym tutaj nie masz nawet koniunkcji wieć o czym mowa...


Włąśnie nie w tym tkwi błąd. Tak jak wcześniej napisałem. Kasowałem AND i Dodawałem OR i próbowałem także bez tego z jednym tylko parametrem. Potem cofałem, aby pokazać jak największą ilość skryptu jakiego zrobiłem.
Nawet jak je dodawałem też nic nie dawało.

Pierwsze pytanie było jeszcze z dni kiedy dopiero zaczynałem z PDO, ale chyba nie w nim problem, bo on wstawia prawidłowo swoje dane tak jak trzeba, lecz to zmienię teraz.


A co do tego pobrania ostatniego ID, chodzi mi o to, że ma być pobrane dokladnie to id, ktore jest przypisane do tych wartosci zawartych w parametrach, bo zalozmy, ze w jednym czasie bedzie sie rejestrowac kilka osob i co wtedy? moze jedno id przypisac dla dwoch osob.

Go to the top of the page
+Quote Post
Turson
post 30.12.2014, 14:00:59
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Czytasz uważnie, bo tam masz "WHERE:" o czym już napisalismy.

Cytat
A co do tego pobrania ostatniego ID, chodzi mi o to, że ma być pobrane dokladnie to id, ktore jest przypisane do tych wartosci zawartych w parametrach, bo zalozmy, ze w jednym czasie bedzie sie rejestrowac kilka osob i co wtedy? moze jedno id przypisac dla dwoch osob.

Jak wrzucasz coś do tabeli, która ma ustawiony Primary Key, to getinsertid pobierze to id z bieżacej sesji bazy danych, nieważne czy ktoś zarejestruje się w czasie tej nanosekundy
Go to the top of the page
+Quote Post
castagir
post 31.12.2014, 14:11:33
Post #6





Grupa: Zarejestrowani
Postów: 146
Pomógł: 3
Dołączył: 28.10.2014

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


Znowu głupi błąd.
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: 1.06.2024 - 09:52