2015-02-28 5 views
-1

Почему этот код возвращает false?PDO Не работает в php

$db = new \PDO('mysql:host=localhost;dbname=apimanager;charset=utf8', 'root', '');  
$q = $db->prepare("select * from tbl_user where username=:u and password=:p"); 
$q->bindParam(':u',$username,\PDO::PARAM_STR); 
$q->bindParam(':p',$password,\PDO::PARAM_STR); 
$stmt = $q->fetchAll();  

if(count($stmt)>0) 
    return(true); 
else 
    return(false); 
+0

мое имя пользователя: admin и пароль: 123 что acutaly существует в dbase –

+3

, чтобы подготовленные операторы работали, вам действительно нужно '-> выполнить()' it. и вам нужно будет хэш ввести пароль, если сохраненная запись в этой строке также хеширована. – Ghost

+0

Включите режим ошибки сразу после вашего подключения: '$ db-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);' – Rizier123

ответ

0

Вам просто нужно позвонить execute(), прежде чем вы получите свои данные, так как вы используете подготовленные заявления, например:

$db = new \PDO('mysql:host=localhost;dbname=apimanager;charset=utf8', 'root', '');  
$q=$db->prepare("select * from tbl_user where username=:u and password=:p"); 
$q->bindParam(':u',$username,\PDO::PARAM_STR); 
$q->bindParam(':p',$password,\PDO::PARAM_STR); 
$q->execute(); 
    //^^^^^^^ See here 
$stmt = $q->fetchAll();  

if($stmt) 
//^^^^^ no need for count, if something is in the array it's true otherwise false 
    return true; 
else 
    return false; 
0

Используйте это таким образом ...

$q=$db->query("select * from tbl_user where username=:u and password=:p"); 
$stmt = $q->fetchAll(); 

И есть ошибка в первой строке ... / присутствует перед тем PDO

$db = new PDO('mysql:host=localhost;dbname=apimanager;charset=utf8', 'root', ''); 
+0

Err. Где 'execute()'? И глобальное пространство имен не имеет никакого значения. – Rizier123

+0

спасибо, но если вы не используете statizer preaper, мой код не был бы безопасным с sql-инъекцией. –

+0

* $ stmt = $ q-> fetchAll(); * Он уже имеет результаты в '$ q ' – Rizier123

0
 $db = new \PDO('mysql:host=localhost;dbname=apimanager;charset=utf8', 'root', '');  
    $q=$db->prepare("select * from tbl_user where username=:u and password=:p"); 
    $q->bindParam(':u',$username,\PDO::PARAM_STR); 
    $q->bindParam(':p',$password,\PDO::PARAM_STR); 
    $q->execute(); 
    $stmt = $q->fetchAll();  
    //print_r($stmt); 
    if(count($stmt)>0) 
     return(true); 
    else 
     return(false); 

спасибо, что вы решили путем addin $ q-> execute();

+0

Пожалуйста, не добавляйте ответ« спасибо », просто прочитайте этот комментарий: http://stackoverflow.com/questions/28779232/pdo-not-workong-in-php#comment45836123_28779232 – Rizier123

Смежные вопросы