Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapytanie nie działa
Forum PHP.pl > Forum > Przedszkole
castagir
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;
SpiritCode
Po WHERE masz ':'
Turson
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{}
castagir
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.

Turson
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
castagir
Znowu głupi błąd.
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.