Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PDO - Zwraca pusty wynik.
xxdrago
post
Post #1





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Witam, zaczynam się uczyć PDO i mam mały problem:

  1. $db = $this->baza; // Polaczenie z baza danych
  2. // Sprawdzamy czy login jest dostępny
  3. $sql = $db->prepare('SELECT count(*) FROM users WHERE login = ":login"');
  4. $sql->bindValue(':login', $login, PDO::PARAM_STR);
  5. $sql->execute();
  6.  
  7. $dostepnosc_loginu = $sql->fetch();
  8.  
  9. var_dump($dostepnosc_loginu);


Nie wiem, dlaczego ale zmienna $dostepnosc_loginu zawiera 0, a w rzeczywiście w bazie jest 1. Można prosić o podpowiedź co jest źle?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
stud3nt
post
Post #2





Grupa: Zarejestrowani
Postów: 46
Pomógł: 7
Dołączył: 6.01.2012

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


A przypisałeś wcześniej cokolwiek do $login? Jak widzę w manualu, bindowane wartości nie są puste.
  1. $calories = 150;
  2. $colour = 'red';
  3. $sth = $dbh->prepare('SELECT name, colour, calories
  4. FROM fruit
  5. WHERE calories < :calories AND colour = :colour');
  6. $sth->bindValue(':calories', $calories, PDO::PARAM_INT);
  7. $sth->bindValue(':colour', $colour, PDO::PARAM_STR);
  8. $sth->execute();


Ten post edytował stud3nt 1.02.2013, 17:27:09
Go to the top of the page
+Quote Post
xxdrago
post
Post #3





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Tak, zmienna $login zawiera "xxdrago", a taki rekord istnieje. Kurde, już kminie kminie i nie wiem w czym błąd...

  1. <?php
  2.  
  3. # --- Dodajemy naglowki --- #
  4. ob_start(); // Buforowanie
  5. error_reporting(E_ALL); // Raportowanie bledow
  6. session_start(); // Sesja
  7.  
  8. require_once dirname(__FILE__) . '/config.php';
  9. require_once dirname(__FILE__) . '/includes/class_register.php';
  10. require_once dirname(__FILE__) . '/includes/functions.php';
  11.  
  12.  
  13. try {
  14. $db = db_connect($type, $host, $dbname, $login, $haslo);
  15. $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  16.  
  17. $r = new register;
  18. $r->setRegister($db);
  19.  
  20.  
  21.  
  22. // Zarejestruj uzytkownika
  23. $r->rejestracja('xxdrago','email','Haslo');
  24. } catch (Exception_ $exception) {
  25. echo 'Wystąpił błąd w linii ' . $exception->getLine() . ': ' . $exception->getMessage();
  26. }
  27. ?>


Klasa:

  1. <?php
  2.  
  3. class register {
  4.  
  5. public $db; // Baza danych
  6.  
  7. public function setRegister($db) {
  8. $this->baza = $db;
  9. }
  10.  
  11. public function rejestracja($login, $email, $haslo) {
  12. $db = $this->baza; // Polaczenie z baza danych
  13. // Sprawdzamy czy login jest dostępny
  14. $sql = $db->prepare('SELECT count(*) FROM users WHERE login = ":login"');
  15. $sql->bindValue(':login', $login, PDO::PARAM_STR);
  16. $sql->execute();
  17.  
  18. $dostepnosc_loginu = $sql->rowCount();
  19.  
  20. echo $dostepnosc_loginu['count(*)'];
  21.  
  22.  
  23. if ($dostepnosc_loginu['count(*)'] == 0) {
  24.  
  25. // Sprawdzamy czy podany e-mail istnieje
  26.  
  27.  
  28. $sql = $db->prepare('SELECT count(*) FROM users WHERE email = ":email"');
  29. $sql->bindValue(':email', $email, PDO::PARAM_STR);
  30. $sql->execute();
  31. $dostepnosc_email = $sql->fetch();
  32.  
  33.  
  34.  
  35.  
  36. if ($dostepnosc_email[0] == 0) {
  37. echo 'ok';
  38. } else {
  39. throw new Exception_('Konto o podanym e-mail już istnieje!');
  40. }
  41. } else {
  42. throw new Exception_('Konto o podanym loginie już istnieje!');
  43. }
  44. }
  45.  
  46. public function logowanie() {
  47. echo 'ok login';
  48. }
  49.  
  50. }
  51.  
  52. ?>


Baza:

  1. -- phpMyAdmin SQL Dump
  2. -- version 2.8.1
  3. -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a>
  4. --
  5. -- Host: localhost
  6. -- Czas wygenerowania: 01 Lut 2013, 17:37
  7. -- Wersja serwera: 5.0.21
  8. -- Wersja PHP: 5.1.4
  9. --
  10. -- Baza danych: `cms_v2`
  11. --
  12.  
  13. -- --------------------------------------------------------
  14.  
  15. --
  16. -- Struktura tabeli dla `users`
  17. --
  18.  
  19. CREATE TABLE `users` (
  20. `id` int(12) NOT NULL AUTO_INCREMENT,
  21. `login` varchar(32) collate utf8_polish_ci NOT NULL,
  22. `haslo` varchar(64) collate utf8_polish_ci NOT NULL,
  23. `email` varchar(128) collate utf8_polish_ci NOT NULL,
  24. `ip` varchar(32) collate utf8_polish_ci NOT NULL,
  25. `przegladarka` varchar(64) collate utf8_polish_ci NOT NULL,
  26. `prawa` varchar(1) collate utf8_polish_ci NOT NULL,
  27. PRIMARY KEY (`id`)
  28. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;
  29.  
  30. --
  31. -- Zrzut danych tabeli `users`
  32. --
  33.  
  34. INSERT INTO `users` VALUES (2, 'xxdrago', '', '', '', '', '');


Ten post edytował xxdrago 1.02.2013, 17:38:32
Go to the top of the page
+Quote Post
Damonsson
post
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


A po co Ci " " w zapytaniu ?
Go to the top of the page
+Quote Post
xxdrago
post
Post #5





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


A no faktycznie ale bez tego też nie chodzi, przyzwyczajenie... próbowałem nawet tak:

  1. <?php
  2. $pdo = new PDO('mysql:host=localhost;dbname=cms_v2','root', '');
  3. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4.  
  5. $login = 'xxdrago';
  6.  
  7.  
  8. $sql = $pdo->prepare('SELECT count(*) FROM users WHERE login =:login');
  9. $sql->bindValue(':login', $login, PDO::PARAM_STR);
  10. $sql->execute();
  11. $dostepnosc_loginu = $sql->rowCount();
  12.  
  13. print_r($dostepnosc_loginu);
  14. ?>


Ale zwraca 0 ... kurde jakim cudem?

Ten post edytował xxdrago 1.02.2013, 18:22:18
Go to the top of the page
+Quote Post
Damonsson
post
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


A w phpMyAdmin?
Go to the top of the page
+Quote Post
xxdrago
post
Post #7





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


phpMyAdmin zwraca 1 tak jak powinno być(SS):
(IMG:http://speeds-upload.tk/upload/obrazki/thumbs/screen_5af256424ae2921b904eff716c7d5839.jpg)

Ten post edytował xxdrago 1.02.2013, 18:32:57
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Wkleiłem .sql i na żywca Twój kod z ostatniego postu i :(IMG:http://i48.tinypic.com/km13d.jpg)

Więc niemożliwe ;P
Go to the top of the page
+Quote Post
xxdrago
post
Post #9





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


haha? Mogę wiedzieć jakie masz php?
Go to the top of the page
+Quote Post
Damonsson
post
Post #10





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


5.3.9

haha, za to mi zwraca za każdym razem 1, nawet jak nie ma takiego loginu (IMG:style_emoticons/default/biggrin.gif)

Wyrzuć count(*) i daj po prostu *

Wtedy powinno być ok.

Ten post edytował Damonsson 1.02.2013, 19:10:01
Go to the top of the page
+Quote Post
sazian
post
Post #11





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


nie znam się na PDO ale tam zawsze będzie jeden
  1. $sql = $pdo->prepare('SELECT count(*) FROM users WHERE login =:login');
  2. $sql->bindValue(':login', $login, PDO::PARAM_STR);
  3. $sql->execute();
  4. $dostepnosc_loginu = $sql->rowCount();

jak nazwa wskazuje rowCount pobiera liczbę pobranych wierszy a to zapytanie zawsze da w wyniku jeden rekord
Go to the top of the page
+Quote Post
xxdrago
post
Post #12





Grupa: Zarejestrowani
Postów: 654
Pomógł: 42
Dołączył: 27.07.2010
Skąd: Jaworzno

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


Zastanawiam, się w czym jest problem... i nie mogę dojść...

sazian,
Tak ale zauważ , że mi zawsze zwraca 0, a jemu zawsze jeden choć nie ma rekordu...

Go to the top of the page
+Quote Post
Damonsson
post
Post #13





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


"Problem" jest, że masz zawsze zwracany jakiś wynik, count 0, albo count 1, albo count 9999, ale zawsze jest to jeden wynik. Czyli RowCount pokaże zawsze 1. Nie wiem czemu u Ciebie pokazuje 0, dziwne, ale to może być jakiś błąd wersji php czy mysql.

Ten post edytował Damonsson 1.02.2013, 20:09:05
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 10:14