Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PDO - problem
Ryder
post
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.01.2008

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


Hej

Mam 2 pytania.

1. Chciałem się dowiedzieć czy jest możliwość wyświetlenia zapytania jakie wykonuje do bazy jeżeli korzystam z PDO.
Konkretnie chodzi mi o echo zapytania 'SELECT * FROM admin WHERE login=:login AND pass=:pass LIMIT 1' już z podstawionymi danymi,
aby sprawdzić czy przesyłane dane są poprawne;

2. Połączenie z bazą mam nawiązane, następnie wykonuje zapytanie do bazy czy dany użytkownik istnieje, tak jak na poniższym kodzie.

Nie wyświetla żadnego błędu i zawsze zwraca mi $ilosc = 1 mimo że tabela admin jest pusta i nie powinien zapisać zmiennej do sesji.



  1. <?php
  2. $stmt=$pdo->prepare('SELECT * FROM admin WHERE login=:login AND pass=:pass LIMIT 1');
  3.        $stmt->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
  4.        $stmt->bindParam(':pass', sha1($_POST['pass']), PDO::PARAM_STR, 40);
  5.        $ilosc = $stmt -> execute();
  6.        if ($ilosc > 0) {
  7.            $_SESSION['islog']="yes";
  8.            $stmt -> closeCursor();
  9.            unset($stmt);
  10.        }else{
  11.            $error = 'Użytkownik nie istnieje';
  12.            $stmt -> closeCursor();
  13.            unset($stmt);
  14.        }
  15. ?>
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Zanim zacznie się coś stosować warto to poznać: PDOStatement->execute()
Funkcja ta nie zwraca żadnej ilości.
Go to the top of the page
+Quote Post
Ryder
post
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.01.2008

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


Z tego manuala wynika, że wartości nie zwraca.

Jednak to nie rozwiązuje mojego problemu, jak sprawdzić czy zapytanie zwróciło wyniki i ile ich jest (tak jak w adodb $res->_numOfRows>0) oraz czy można wyświetlić sqla jaki idzie do bazy;


Zasugerowałem się po prostu manualem z wikipedi, gdzie ta zmienna do czego innego jest wykorzystywana.

  1. <?php
  2. if($_SERVER['REQUEST_METHOD'] == 'POST')
  3.        {    
  4.            $pdo = new PDO('mysql:host=localhost;dbname=produkty;port=3305', 'root', 'root');
  5.            $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.    
  7.            $stmt = $pdo -> prepare('INSERT INTO `produkty` (`nazwa`, `opis`, `ilosc`, `cena`, `jakosc`)    VALUES(
  8.                :nazwa,
  9.                :opis,
  10.                :ilosc,
  11.                :cena,
  12.                :jakosc)');    // 1
  13.            
  14.            $stmt -> bindValue(':nazwa', $_POST['nazwa'], PDO::PARAM_STR); // 2
  15.            $stmt -> bindValue(':opis', $_POST['opis'], PDO::PARAM_STR);
  16.            $stmt -> bindValue(':ilosc', $_POST['ilosc'], PDO::PARAM_INT);
  17.            $stmt -> bindValue(':cena', (float)$_POST['cena'], PDO::PARAM_STR);
  18.            $stmt -> bindValue(':jakosc', $_POST['jakosc'], PDO::PARAM_INT);
  19.            
  20.            $ilosc = $stmt -> execute(); // 3
  21.    
  22.            if($ilosc > 0)
  23.            {
  24.                echo 'Dodano: '.$ilosc.' rekordow';
  25.            }
  26.            else
  27.            {
  28.                echo 'Wystapil blad podczas dodawania rekordow!';
  29.            }
  30.        }
  31. ?>
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat(Ryder @ 26.02.2009, 15:30:07 ) *
  1. <?php
  2. $stmt=$pdo->prepare('SELECT * FROM admin WHERE login=:login AND pass=:pass LIMIT 1');
  3.        $stmt->bindParam(':login', $_POST['login'], PDO::PARAM_STR);
  4.        $stmt->bindParam(':pass', sha1($_POST['pass']), PDO::PARAM_STR, 40);
  5.        $ilosc = $stmt -> execute();
  6.        if ($ilosc > 0) {
  7.            $_SESSION['islog']="yes";
  8.            $stmt -> closeCursor();
  9.            unset($stmt);
  10.        }else{
  11.            $error = 'Użytkownik nie istnieje';
  12.            $stmt -> closeCursor();
  13.            unset($stmt);
  14.        }
  15. ?>

Skoro do sesji wkładasz jakas wartosc ktorej nie wyciągasz z bazy to zrob sobie COUNT -a i sprawdz ile wyników zwróci.

example
  1. <?php
  2. $sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
  3. if ($res = $conn->query($sql)) {
  4.  
  5.    /* Check the number of rows that match the SELECT statement */
  6.    if ($res->fetchColumn() > 0)
  7. ?>
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: 24.08.2025 - 19:24