Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pdo - problem z wykonaniem zapytania
Forum PHP.pl > Forum > PHP
dzesi
WITAM tworze skrypt rejestracji ale jego obsługa będzie przez pdo i dlatego mam mały problem bo pdo dopiero poznaje , wiec nie do końca zapytania są poprawne
Mam tutaj funkcje ktora sprawdza czy dany user istnieje
  1. <?php
  2. public function czy_istnieje()
  3. {
  4. $query="SELECT `login` FROM `user` WHERE login='".$this->login."'";
  5. $zapytanie=$pdo->query($query);
  6. $pdo->fetch($zapytanie > 0);
  7. ?>

Czy ktoś mógłby pokazać mi poprawny przykład jak to powiano być ?
NoiseMc
Na przyklad tak:
  1. <?php
  2.  
  3. class User
  4. {
  5. protected $db;
  6.  
  7. public function __construct ()
  8. {
  9. $this->db = new PDO ('mysql:host=' . $config->host . ';dbname=' . $config->dbname . '', $config->username, $config->password);
  10. }
  11.  
  12. public function czyIstnieje ($login)
  13. {
  14. $query = 'SELECT COUNT(*) FROM user WHERE login = :login';
  15.  
  16. $statement = $this->db->prepare ($query);
  17.  
  18. $statement->bindParam (':login', $login);
  19.  
  20. $statement->execute ();
  21.  
  22. return ($statement->fetchColumn () > 0);
  23. }
  24. }
  25.  
  26. ?>


A wiecej informacji znajdziesz tutaj
dzesi
Nadal pokazuje mi błąd teraz ze nie ma obiektu , za bardzo tego nie rozumie dlatego ze z pdo zaczynam dopiero swoja przygodę
  1. <?php
  2. public function czy_istnieje()
  3. {
  4. $query="SELECT COUNT(*) FROM `user` WHERE login='".$this->login."'";
  5. /* $zapytanie=$pdo->query($query);
  6. $pdo->fetch($zapytanie > 0);*/
  7. $statement = $this->db->prepare($query);
  8. $statement->bindParam ($this->login);
  9.  
  10. $statement->execute ();
  11. ?>

Co robie źle worriedsmiley.gif questionmark.gif
john_doe
mam nadzieje że gdzie tam wyżej tworzysz obiekt PDO?
i zamknij klamre funckji czyistnieje
dzesi
Tak tworze nowy obiekt i nadal nie wiem co jest źle może wy mi poradzicie ?
  1. <?php
  2. public function polaczenie()
  3. {
  4. try{
  5. $pdo =new PDO('mysql:host=localhost;dbname=dzesi_log','ccc','xxx');
  6. echo "Polaczenie udalo sie";
  7. }
  8. catch(PDOException $e)
  9. {
  10. echo " Nie można polaczy sie z baza" .$e->getMessage();
  11.  
  12. exit();
  13.  
  14.  
  15. }
  16. // zamkniecie polaczenia z baza  $pdo=null;
  17. }
  18.  
  19. public function czy_istnieje()
  20. {
  21. $query="SELECT COUNT(*) FROM `user` WHERE login='".$this->login."'";
  22. /* $zapytanie=$pdo->query($query);
  23. $pdo->fetch($zapytanie > 0);*/
  24. $statement = $this->db->prepare($query);
  25. $statement->bindParam($this->login);
  26.  
  27. $statement->execute ();
  28.  
  29. return ($statement->fetchColumn()> 0);
  30.  
  31. }
  32. ?>


Czy ktoś używa na tym forum pdo ?, czy to dopiero nowość u nas:) na forum worriedsmiley.gif
jang
Cytat(dzesi @ 2.01.2008, 15:01:16 ) *
Nadal pokazuje mi błąd teraz ze nie ma obiektu , za bardzo tego nie rozumie dlatego ze z pdo zaczynam dopiero swoja przygodę
Sęk w tym, że Ty nie masz problemu z PDO tylko z PHP !
Jak niby Twoim zdaniem to $pdo wydostaje się z tej metody ?
Poza tym $this->db->prepare($query); to $this->db samo się przekształciło z $pdo w $db ?

Jeśli obie metody są w tej samej klasie to:
  1. <?php
  2. $this->pdo =new PDO('mysql:host=localhost;dbname=dzesi_log','ccc','xxx');
  3. ?>
i w kolejnej metodzie
  1. <?php
  2. $this->pdo->prepare($query);
  3. ?>
a jeśli to są dwie różne klasy to musisz to połączenie jakoś przekazać !
  1. <?php
  2. class user
  3. {
  4. public function __construct($objPdo)
  5. {
  6. $this->objPdo = $objPdo;
  7. }
  8.  
  9. public function czyIstnieje()
  10. {
  11. ...
  12. $stmt = $this->objPdo->prepare($query);
  13. $stmt->bindValue(':login', $login, PDO::PARAM_STR);
  14. $stmt->execute();
  15. ...
  16. }
  17. }
  18. ?>
dzesi
Nadal Panowie mam problem wstydnis.gif ,
używam Zend for eclipse robie wszystko zgodnie z php.net/manaual/pdo (tak mi sie wydaje a zend ciągle błędy pokazuje
o to kawałek kodu w którym coś na pewno coś nie do końca zrobiłem
o to kwałek klasy .
  1. <?php
  2. public function polaczenie()
  3. {
  4.  
  5.  
  6.  
  7. /*** mysql username ***/
  8. $username = 'root';
  9.  
  10. /*** mysql password ***/
  11. $password = '';
  12.  
  13. try {
  14. $this->pdo = new PDO("mysql:host=$hostname;dbname=dzesi_log", $username, $password);
  15.  
  16. echo 'Connected to database';
  17. }
  18. catch(PDOException $e)
  19. {
  20. echo $e->getMessage();
  21. }
  22.  public function czy_istnieje()
  23. {
  24. $query="SELECT `login` FROM `user` WHERE login='".$this->login."'";
  25.  $zapytanie=$pdo->query($query);
  26. $pdo->exec($zapytanie > 0);
  27. //////////////////////////////////
  28. $statement = $this->pdo->prepare($query);
  29.  
  30.  
  31.  
  32.  
  33. $stream=$this->pdo->bindParam(':login', $login);
  34.  
  35. $statement->execute ();
  36. return ($statement->fetchColumn () > 0);
  37. }
  38. ?>

Posiadacie jakieś ebooki do pdo ? lub jakieś example lub tutoriale questionmark.gif
PiotrLegnica
Nadal używasz nieistniejących zmiennych lokalnych, a w metodzie czy_istnieje masz bzdury. smile.gif
A materiały - np. http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO

  1. <?php
  2. public function polaczenie() {
  3.  try {
  4. $this->pdo = new PDO('mysql:host=localhost;dbname=dzesi_log', 'root', '');
  5. echo 'Connected to database';
  6.  } catch(PDOException $e) {
  7. echo $e->getMessage();
  8.  }
  9. }
  10.  
  11. public function czy_istnieje() { // tu by się jeszcze przydało obsłużyć ew. PDOException
  12.  $statement = $this->pdo->prepare('SELECT `login` FROM `user` WHERE `login`=:login');
  13.  $statement->bindValue(':login', $this->login);
  14.  $statement->execute();
  15.  return ($statement->fetch() !== false);
  16. }
  17. ?>
NoiseMc
Widze ze obiektowo ciezko idzie tak wiec wkleje jeszcze raz to co napisalem wczesniej tyle ze na funkcjach (wlasciwie to samo jest w manualu):
  1. <?php
  2. function nawiazPolaczenie ()
  3. {
  4. /**
  5.  * Nawiazanie polaczenia
  6.  */
  7. $db = new PDO ('mysql:host=localhost;dbname=WPISZ_NAZWE_BAZY', WPISZ_NAZWE_UZYTKOWNIKA, WPISZ_HASLO);
  8.  
  9. return $db;
  10. }
  11.  
  12. function czyIstnieje ($login)
  13. {
  14. $db = nawiazPolaczenie ();
  15.  
  16. /**
  17.  * Tresc zapytania z miejscem na wstawienie parametru :login
  18.  */
  19. $query = 'SELECT COUNT(*) FROM user WHERE login = :login';
  20.  
  21. /**
  22.  * Przygotowanie zapytania
  23.  */
  24. $statement = $db->prepare ($query);
  25.  
  26. /**
  27.  * Wstawienie wartosci parametru :login ze zmiennej $login
  28.  */
  29. $statement->bindParam (':login', $login);
  30.  
  31. /**
  32.  * Wykonanie zapytania
  33.  */
  34. $statement->execute ();
  35.  
  36. /**
  37.  * Sprawdzenie czy jest wiecej niz zero uzytkownikow o takim loginie
  38.  * Jezeli tak to znaczy ze uzytkownik istnieje
  39.  */
  40. $liczbaUzytkownikow = $statement->fetchColumn ();
  41. $uzytkownikIstnieje = $liczbaUzytkownikow > 0;
  42.  
  43. return $uzytkownikIstnieje;
  44. }
  45. ?>


Mam nadzieje ze bedzie jasniej winksmiley.jpg
dzesi
Klasa niby działa , ale nie do końca ciągle zwraca mi ze user już istnieje i ze nie można dodać
Teraz mam czas zeby poprzerabiac może zadziała ale jak by co prosze o pomoc
  1. <?php
  2. // kawałek kodu public function czy_istnieje()
  3. {
  4.  
  5.  
  6. $db= $this-> polaczenie();
  7.  
  8.  
  9. $query = 'SELECT COUNT(*) FROM user WHERE login = :login';
  10.  
  11.  
  12. $statement = $db->prepare($query);
  13.  
  14.  
  15. $statement->bindParam (':login', $login);
  16.  
  17.  
  18. $statement->execute ();
  19.  
  20.  
  21. $liczbaUzytkownikow = $statement->fetchColumn ();
  22. $uzytkownikIstnieje = $liczbaUzytkownikow > 0;
  23.  
  24. return $uzytkownikIstnieje;
  25. }
  26. ?>
  1. [/php]
  2.  
  3. Nie no w mnie chyba zabijecie:P.Znowu mam problem blinksmiley.gif Jak pisze klasę rejestracji za pomocą normalnych metod mysqli jest ok, jak biorę sie za coś nowego PDO to zawsze jest pod górkę
  4. O to cała klasa napisana z zapytaniami w pdo mam nadzieje ze w końcu ktoś pokaże mi co jest źle i będzie to działać
  5. [php]<?php
  6. class Rejestracja
  7. {
  8.  
  9. private $login;
  10. private $haslo;
  11. private $haslo2;
  12.  
  13.  
  14. public function __construct()
  15. {  // wczytywanie zawartosci pliku do klasy 
  16. //include_once('config.php');
  17. // Odbieranie danych z formularza
  18. $this->login=$_POST['login'];
  19. $this->haslo=$_POST['haslo'];
  20. $this->haslo2=$_POST['haslo2'];
  21.  
  22. }
  23. public function walidacja_danych()
  24. {
  25.  
  26. if(empty($this->login) || empty($this->haslo) )
  27. { 
  28.  
  29.  if(empty($this->login) && empty($this->haslo) )
  30.  {
  31. throw new Exception("Blad nie podales loginu lub hasła ");
  32. }
  33.  
  34. }
  35.  
  36.  
  37.  
  38. }
  39.  
  40. public function polaczenie()
  41. {
  42. try{
  43. $db =new PDO('mysql:host=localhost;dbname=xxx','root','xxx');
  44. echo "Polaczenie udalo sie biggrin.gif";
  45. return $db;
  46.  
  47. }
  48. catch(PDOException $e)
  49. {
  50. echo " Nie można polaczy sie z baza" .$e->getMessage();
  51.  
  52. exit();
  53.  
  54.  
  55. }
  56. // zamkniecie polaczenia z baza  $pdo=null;
  57. }
  58.  
  59. function czyistnieje ($login)
  60. { 
  61. $db = polaczenie ();
  62.  
  63. $query = 'SELECT COUNT(*) FROM `use`r WHERE login ='." $this->login".';
  64.  
  65.  
  66. $statement = $db->prepare ($query);
  67.  
  68.  
  69.  
  70.  
  71. $statement->execute ();
  72.  
  73.  
  74. $liczbaUzytkownikow = $statement->fetchColumn ();
  75. $uzytkownikistnieje = $liczbaUzytkownikow > 0;
  76.  
  77. return $uzytkownikistnieje;
  78. }
  79. public function rejstracja_usera()
  80. {
  81.  
  82.  
  83. $zarejestruj_usera="INSERT INTO `user`(`login`,`haslo`) VALUES('".$this->login."','".$this->haslo.")";  
  84.  $db->prepare($zarejestruj_usera);
  85.  
  86.  
  87. }
  88.  
  89. }
  90.  
  91. $starting = new Rejestracja();
  92. try {
  93. $starting->walidacja_danych();
  94. }
  95. catch (Exception $e)
  96. {
  97. echo $e->getMessage();
  98. }
  99.  
  100. //$starting->polaczenie();
  101. $starting->rejstracja_usera();
  102.  
  103.  
  104. ?>
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.