Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Kłopot z pobraniem odpowiedniego id
Forum PHP.pl > Forum > Przedszkole
mikajlo
Witam,
jakis czas temu zacząłem tworzyć swój pierwszy mini-system pod konkretny cel.. (nie jest on tutaj istotny więc go pominę..)

W pierwszej kolejność chcę stworzyć system logowania i rejestracji do serwisu.. W ręcę wpadła mi książka z heliona ( http://pdf.helion.pl/phmspr/phmspr-1.pdf ) z gotowym kodem, który właśnie przerabiam pod swoje wymagania..

Jako iż operacja dodawania, aktualizowania wykonuje za pomocą procedur nie mogę całościowo wykorzystać kod z książki..(tam jest to wykonywane za pomocą zwykłych zapytań).

I teraz pojawił mi się problem przy przeróbce tego kodu:

kod z książki

  1. public function save()
  2. {
  3. if ($this->uid)
  4. {
  5. $query = sprintf('UPDATE %sUSER SET USERNAME = "%s", ' .
  6. 'PASSWORD = "%s", EMAIL_ADDR = "%s", IS_ACTIVE = %d ' .
  7. 'WHERE USER_ID = %d',
  8. DB_TBL_PREFIX,
  9. mysql_real_escape_string($this->username, $GLOBALS['DB']),
  10. mysql_real_escape_string($this->password, $GLOBALS['DB']),
  11. mysql_real_escape_string($this->emailAddr, $GLOBALS['DB']),
  12. $this->isActive,
  13. $this->userId);
  14. mysql_query($query, $GLOBALS['DB']);
  15. }
  16. else
  17. {
  18. $query = sprintf('INSERT INTO %sUSER (USERNAME, PASSWORD, ' .
  19. 'EMAIL_ADDR, IS_ACTIVE) VALUES ("%s", "%s", "%s", %d)',
  20. DB_TBL_PREFIX,
  21. mysql_real_escape_string($this->username, $GLOBALS['DB']),
  22. mysql_real_escape_string($this->password, $GLOBALS['DB']),
  23. mysql_real_escape_string($this->emailAddr, $GLOBALS['DB']),
  24. $this->isActive);
  25. mysql_query($query, $GLOBALS['DB']);
  26.  
  27. $this->uid = mysql_insert_id($GLOBALS['DB']);
  28. }
  29. }


a przede wszystkim chodzi o fragment $this->uid = mysql_insert_id($GLOBALS['DB']);, dzieki któremu pozyskiwane jest id wstawionego wiersza.. Z racji tego iż używam procedur, nie mogę skorzystać z tego polecenia..

mój kod:
  1. public function save()
  2. {
  3. if ($this->uid)
  4. {
  5. //kod
  6. }
  7. else
  8. {
  9. $query = sprintf('CALL insertUser("%s", "%s", "%s","%s","%s","%s","%s", %s)',
  10. mysql_real_escape_string($this->username, $GLOBALS['DB']),
  11. mysql_real_escape_string($this->password, $GLOBALS['DB']),
  12. mysql_real_escape_string($this->firstName, $GLOBALS['DB']),
  13. mysql_real_escape_string($this->lastName, $GLOBALS['DB']),
  14. mysql_real_escape_string($this->address, $GLOBALS['DB']),
  15. mysql_real_escape_string($this->city, $GLOBALS['DB']),
  16. mysql_real_escape_string($this->emailAddr, $GLOBALS['DB']),
  17. //$this->isActive,
  18. mysql_real_escape_string($this->pesel, $GLOBALS['DB']));
  19. mysql_query($query, $GLOBALS['DB']);
  20. }
  21. }


Próbowałem tak "w normalny" sposób wydobyć to id..
  1. query1 = sprintf('SELECT u.user_id FROM users u, persons p WHERE p.pesel="%s" AND u.username="s"',
  2. mysql_real_escape_string($this->pesel, $GLOBALS['DB']),
  3. mysql_real_escape_string($this->username, $GLOBALS['DB']));

..ale nie wiedzieć czemu, wynik jaki otrzymuje zawsze wynosi 8 :-| (a przy próbie odpalenia tego bezpośrednio w sqlu mam dobre wyniki.)

Myślałem juz nad rozwiązaniem tego poprzed zwrócenie z procedury parametru (czyli tego szukanego id), ale nie wiem za bardzo jak potem w php to obsłużyć i zapisać pod zmienną this->uid; (w sieci znajduje jakieś przykłady z wykorzystaniem PDO ale coś nie mogę tego przerobić pod siebie...)

Co mogę zrobić w takiej syutacji ? Może zauważacie jakieś błędy ?
CuteOne
Przeanalizuj Temat: PHPAJAX Wydajny shoutbox
mikajlo
Hm.. dzięki za odpowiedź, ale coś mi nie cyka.. sad.gif

Ogólnie patrząc na twój kod zauważyłem, że raczej źle wywoływałem zapytanie z selectem..

ale ten kod teoretycznie po poprawie też nie działa .. tzn. nawet te zmiennie nic w sobie nie zawierają.. a powinny .. :-/

EDIT:
chyba jestem na dobrej drodze, ale jutro się upewnie bo dzisiaj wysiadam...

EDIT2:
OK, już mam.. okazało się, że popełniłem błąd przy wywoływaniu procedury za pomocą mysql_query..
Z procedurą wszystko było ok..
CuteOne
Pokaż poprawioną procedurę
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-2024 Invision Power Services, Inc.