2014-09-21 4 views
0

Im создание системы входа для моего сайта. меня проблема, что мой mysqli_query пуст:mysqli_query дает пустое значение

Код: $r = mysqli_query($dbc, $q); returns empty.

Я думаю, что проблема в языке SQL, что я передать его:

$q = "SELECT userid, fname, lname FROM User WHERE email='$e' AND pass=SHA1('$p')"; 

Если я выполнить SQL выше с данными, которые im фактически извлекает из формы, тогда я получу результат, который я ищу. Так что я думаю, что его php и sql вместе взятые получили ошибку.

if(empty($errors)){ 
    $q = "SELECT userid, fname, lname FROM User WHERE email='$e' AND pass=SHA1('$p')"; 

    $r = mysqli_query($dbc, $q); 
    //Check for right data 
    $errors[] = $e; 
    $errors[] = $p; 
    //Check if connection is up 
    if($dbc != null){ 
     $errors[] = "Connection up"; 
    } 
    //Check query 
    if(is_null($r)){ 
     $errors[] = "Query is null"; 
    } 
    //Check query for being empty 
    if(empty($r)){ 
     $errors[] = "Its empty"; 
    } 
    if(mysqli_num_rows($r) == 1){ 
     $row = mysqli_fetch_array($r, MYSQLI_ASSOC); 
     return array(true, $row); 
    }else{ 
     $errors[] = "Email address and password not found."; 
    } 
    return array(false, $errors); 

} 
+0

ли запрос приводит к ошибке, или просто не найти каких-либо результатов? Если последний, каков фактический выполняемый запрос времени выполнения и соответствует ли он результатам в базе данных? Если вы выполняете тот же запрос вручную против базы данных, результаты отличаются? – David

+0

Его при вызове if (empty ($ r)) {$ error [] = "Его пустой";} что он говорит, что $ r пуст. Если я возьму инструкцию sql и запустил ее в базе данных, я получу результаты, которые я хочу. – McBoman

+0

Если «пустой» означает, что произошла ошибка, проверьте базу данных на наличие ошибок. Если «empty» означает, что результатов не было найдено, проверьте запрос вручную по базе данных и посмотрите, что вы найдете. Если никакая запись в таблице не соответствует критериям в предложении WHERE, результаты не будут возвращены. (Примечание: ваши логотипы после этого сломаны. Если число результатов больше одного, что вряд ли означает, что адрес электронной почты и пароль не найдены ...) – David

ответ

1

Вы можете попробовать это

if(empty($errors)){ 
    $p = sha1($p); 
    $q = "SELECT userid, fname, lname FROM User WHERE email = '$e' AND pass = '$p'"; 

    $r = mysqli_query($dbc, $q); 
    if(!$r){ 
     die(mysqli_error($dbc)); 
    } 

    //Check for right data 
    $errors[] = $e; 
    $errors[] = $p; 
    //Check if connection is up 
    if($dbc != null){ 
     $errors[] = "Connection up"; 
    } 
    //Check query 
    if(is_null($r)){ 
     $errors[] = "Query is null"; 
    } 
    //Check query for being empty 
    if(empty($r)){ 
     $errors[] = "Its empty"; 
    } 
    if(mysqli_num_rows($r) > 0){ 
     $row = mysqli_fetch_assoc($r); 
     return array(true, $row['userid'], $row['fname'], $row['lname']); 
    }else{ 
     $errors[] = "Email address and password not found."; 
    } 
    return array_merge(array(true), $errors); 
} 
+0

Не работает. – McBoman

+0

Проверьте 'mysqli_error ($ dbc)' как я обновил, что происходит не так! – MH2K9