Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] PDO execute()
Forum PHP.pl > Forum > Przedszkole
-noobek-
Witam!

Może kod:
Kod
function LoginExist($login){
    global $pdo;
    $query = $pdo->prepare("select * from UZYTKOWNICY where LOGIN=':login'");
    $query->bindParam(':login', $login, PDO::PARAM_STR);        
    $result = $query->execute();    
    if($result == FALSE){
        return false;
    }
    else{
        return true;
    }
    
}


Problem w tym ze zawsze zwraca true... nie mam już sił próbowałem na milion sposobów.
Niktoś
Spróbuj tak:
$query = $pdo->prepare("IF EXISTS(select * from UZYTKOWNICY where LOGIN=':login')SELECT 1 ELSE SELECT 0");
a dalej bez zmian.
skowron-line
True jest zwracane jeżeli zapytanie zostało wykonane pomyślnie a nie jeżęli zwróciło jakiś wynik. Źle stosujesz tą metodę.
-noobek-
Ok zgadzam się z tym, że tam było źle, ale probowalem też tak:

Kod
function LoginExist($login){
    global $pdo;
    $query = $pdo->prepare("select * from UZYTKOWNICY where LOGIN=':login'");
    $query->bindParam(':login', $login, PDO::PARAM_STR);        
    $result = $query->execute();
    $result = $result -> fetch();    
    $result->closeCursor();    
    if($result){
         unset($result); return TRUE;
    }
    else{
         return FALSE;
    }
    
}

i dostaje:
Kod
Fatal error: Call to a member function fetch() on a non-object in /home/vol4/jcom.pl/jcom_10294194/htdocs/funkcje/core.php on line 49


Może to ma związek, że wyżej używam podobnej analogicznej funkcj ktora dziala:
Kod
function IloscPunktow($user)
{
    global $pdo;
    $query = $pdo->prepare("select * from UZYTKOWNICY where LOGIN=':user'");
    $query->bindParam(':user', $user, PDO::PARAM_STR);        
    $result = $query->execute();    $
    $result = $result -> fetch();
    $points = $result['PUNKTY'];
    $result->closeCursor();
    unset($result);
    return $points;
}
-noobek-
nadal:
Fatal error: Call to a member function columnCount() on a non-object in /home/vol4/jcom.pl/jcom_10294194/htdocs/funkcje/core.php on line 49
Niktoś
Może utwórz klasę pdo i przy każdym łączeniu z bazą danych odwołuj się do instancji klasy.
Być może global $pdo powoduje błędy,ale to tylko moje domysły ,jednakże z tego co czytałem nie zalecane jest używanie tejże metody.
http://stackoverflow.com/questions/4696189...p-object-global
Crozin
http://www.php.net/manual/en/pdo.prepared-statements.php - zwróć uwagę jak wstawia się placeholdery do zapytania.
-noobek-
Dobrze mam placeholdery bo inna funkcja(podalem ja) dziala ok
-noobek-
Kurcze spróbowałem wszystkiego co polecaliście i dalej nie działa...a nawet jak wróciłem do starych ustawień, nie działa to co wcześniej działało. Ma ktoś jeszcze jakieś pomysły?
Crozin
Nie działa Ci, bo źle używasz parametrów - nie powinny być one otoczone apostrofami. W tej chwili ':login' jest traktowane jako dosłowny tekst :login, a domyślam się, że nie masz takiego użytkownika.
-noobek-
KOLEGO naucz się czytać! Pisałem, że próbowałem tak jak radziłeś i nie działa tez. I nie to jest bledem a to, że $result nie jest klasą, tak jakby przypisanie nie działoło, gdy uzywam
Kod
global $pdo;
    $query = $pdo -> prepare("select * from UZYTKOWNICY where LOGIN=':user'");
    $query -> bindParam(':user', $user, PDO::PARAM_STR);    
    $result = $query -> execute();    //tu jakby sie cos walilo [code]

dla twojej wiadomosci:

probowałem robić tak, że robiłem [code]$user="'".$user."'";
a potem dawłem samo :user i to w ogole nie dziala.
TAK SAMO PISALEM, że to co miałem wczesniej DZIALALO,(ta druga funkcja, a zrobione analogicznie), a teraz nie dziala ani to ani to. Wiec jak masz pisac pierdoly to się nie odzywaj. Ktos inny może wie o co kaman?
-noobek-
Btw twoj argument jest bez sensu, nawet jesli by szukalo uzytkownika o nazwie :user to by go nie znalazlo i by mi nic nie zwracalo i tak powinno to dzialac a nie rzucac bledami...
viking
Masz to zapisać jako:
  1. $query = $pdo -> prepare("select * from UZYTKOWNICY where LOGIN=:user");
-noobek-
Dobra uporałem się z tym sam.
Ale z was "miszczowie"...

Tak powinno byc...
Kod
function LoginExist($login){
    global $pdo;
    $query = $pdo -> prepare("select * from UZYTKOWNICY where LOGIN=':login'");
    $query -> bindParam(':login', $login);          
    $query -> execute();
    $wynik =$query->fetch();  
    $query->closeCursor();
    if($wynik){
          return TRUE;
    }
    else{
         return FALSE;
    }    
}
Niktoś
Miszczu odpowiedź powinna brzmieć według mnie tak:dzięki za chęci pomocy,ale poradziłem sobie z tym sam.
No i pomagaj takiemu. thumbsdownsmileyanim.gif
by_ikar
  1. function LoginExist($login){
  2. global $pdo;
  3. $query = $pdo -> prepare('select * from UZYTKOWNICY where LOGIN=:login');
  4. $query -> bindParam(':login', $login);
  5. $query -> execute();
  6. if($query->rowCount()){
  7. return TRUE;
  8. }
  9. else{
  10. return FALSE;
  11. }
  12. }


Jeżeli chcesz znaleźć ilość rekordów które pasuje do zapytania, to rowCount, chyba że korzystasz z bazy danych która nie udostępnia w swoim API *_num_rows(), jak chociażby sqlite, to wtedy używasz fetch, i sprawdzasz czy zwraca false jeżeli nie będzie żadnego dopasowanego rekordu.

BTW mistrzem to trzeba być żeby bawić się w gobale..
Niktoś
Cytat
Ale z was "miszczowie"...

Miszczem ,nie mistrzem biggrin.gif
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.