Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] PDO i bindParams
Forum PHP.pl > Forum > Przedszkole
john_doe
Witajcie,

stworzyłem klasę querries
  1. class querries {
  2.  
  3. const SELECT_USER_LOGIN =
  4. 'SELECT * FROM ex_users WHERE user_login = \'loginUsera\'';
  5.  
  6.  
  7. //. stripslashes($nazwaUser) .
  8.  
  9. }


a także klasę User
  1. include_once( 'class.dataSource.php' );
  2. include_once( 'class.querries.php' );
  3.  
  4. class user {
  5.  
  6. var $userLogin,
  7. $userPaswd,
  8. $userLevel;
  9.  
  10. public function __construct( $userLogin, $userPaswd )
  11. {
  12. $this->userLogin = $userLogin;
  13.  
  14. $this->userPaswd = $userPaswd;
  15. }
  16.  
  17. public function registerUser()
  18. {
  19. $connection = new dataSource();
  20.  
  21. $dbh = $connection->getConnection();
  22.  
  23. $dbh->beginTransaction();
  24.  
  25. $stmt = $dbh->prepare( querries::SELECT_USER_LOGIN );
  26.  
  27. $stmt->execute();
  28.  
  29. while ( $row = $stmt->fetch() )
  30. {
  31. echo $row['user_surname'];
  32. }
  33.  
  34. }


używam tak
  1. include_once( 'class.user.php' );
  2.  
  3. // przyjdą POSTem
  4. $nazwaUser = 'kcwiklak';
  5. $hasloUser = 'dupa';
  6.  
  7. $userReg = new user( $nazwaUser, $hasloUser );
  8.  
  9. $userReg->registerUser();



w takiej postaci działa jak bym chciał ale na sztywno podaję userLogin. Jak zmienić w querries abym mógł w klasie users dodawać parametry? i może jeszcze jedno jak w takim kodzie przypisać dane usera do sesji?

poradziłem sobie tak modyfikując klasę querries
  1. class querries {
  2.  
  3. const SELECT_USER_LOGIN =
  4. "SELECT * FROM ex_users WHERE user_login = %s";
  5.  
  6.  
  7. //. stripslashes($nazwaUser) .
  8.  
  9. }

i klasę user
  1. public function registerUser($userLogin, $userPaswd)
  2. {
  3. $connection = new dataSource();
  4.  
  5. $dbh = $connection->getConnection();
  6.  
  7. $dbh->beginTransaction();
  8.  
  9. $stmt = $dbh->prepare( vsprintf( querries::SELECT_USER_LOGIN, $userLogin ));
  10.  
  11. $stmt->execute();
  12.  
  13. while ( $row = $stmt->fetch() )
  14. {
  15. echo $row['user_surname'];
  16. }
  17.  
  18. }


z tym, że nie do końca działa bo user_login to string i muszę go w uszy w zapytaniu zapakować.
Ma ktoś może sprytny sposób jak to fajnie w sesje zapakować? cały wynik zapytania - wszystkie dane usera.
masiakla
Próbujesz tutaj używać statemntów ale tego nie robisz, drugie rozwiązanie wcale się nie różni zbytnio od zapytania za pomocą mysql_query. Powinno to mnie więcej wyglądać tak:
  1. class querries {
  2. const SELECT_USER_LOGIN =
  3. 'SELECT * FROM ex_users WHERE user_login = :loginUsera';
  4. }
  5. class User {
  6. //...
  7. public function registerUser($userLogin, $userPasswd){
  8. //... przy selectie transakcja, jak pracujesz na MyISAM to i tak z powodzeniem możesz sobie podarować transakcje, ponieważ są nieobsługiwane ?
  9. $stmt = $dbh->prepare(querries::SELECT_USER_LOGIN);
  10. $stmt->bindValue('loginUsera', $userLogin, PDO::PARAM_STR);
  11. $stmt->execute();
  12. //...
  13. }
  14. //...
  15. }

Jest to jedna z metod bindowania, masz jeszcze funkcję bindParam, która umieszcza referencję do danej zmiennej i wartość jest przypisywana dopiero w momencie wywołania execute(). Można też zamiast nazwy zmiennej użyć znaków zapytania, ale tu odsyłam do dokumentacji(http://pl2.php.net/manual/en/pdostatement.bindvalue.php)
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.