Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PDO - problem
Forum PHP.pl > Forum > PHP
Ryder
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. ?>
mike
Zanim zacznie się coś stosować warto to poznać: PDOStatement->execute()
Funkcja ta nie zwraca żadnej ilości.
Ryder
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. ?>
skowron-line
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. ?>
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.