2013-11-13 2 views
0

У меня снова больше проблем, которые я действительно не могу найти причину.PHP У подготовленного заявления есть проблема

Приведенный ниже код производит: «Проблема», что означает, что первый оператор IF является ложным, должен быть правдой.

PHP:

function login($email, $password, $mysqli) { 
    //Use prepared statements to stop SQL Injection 
    if ($stmt = $mysqli->prepare("SELECT id, email, password, salt, perms FROM users WHERE email = ? LIMIT = 1")) { 
     $stmt->bind_param('s', $email); //Bind "$email" to paramater 
     $stmt->execute(); //Execute the query 
     $stmt->store_result(); 
     $stmt->bind_result($user_id, $email, $db_password, $salt, $perms); //get variables from result 
     $stmt->fetch(); 
     $password = hash('sha512', $password.$salt); //hash the password with the unique salt 

     if ($stmt->num_rows == 1) { //If user exists 
      //Check that user account isn't locked 
      if (checkbrute($user_id, $mysqli) == true) { 
       //Account is locked, alert user 
       return false; 
      } else { 
       if ($db_password == $password) { //Check that passwords match 
        //matches 
        echo "matches"; 
       } 
      } 
     } else { 
      echo "No user found!"; 
     } 
    } else { 
     echo "Issue"; 
    } 
} 

$ электронной почты и пароль $ не пустой, а $ MySQLi является объектом базы данных. Есть идеи? Я не могу понять это вообще, все выглядит хорошо для меня.

ответ

3

Вы должны добавить mysql сообщение об ошибке. Было бы сказано, что в вашем запросе возникла проблема около LIMIT = 1.

Запрос должен быть:

SELECT id, email, password, salt, perms FROM users WHERE email = ? LIMIT 1

Для добавления сообщений об ошибках, изменить echo "issue"; быть:

echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
3

Limit = 1 должен быть LIMIT 1. Ниже приведено исправление if:

if ($stmt = $mysqli->prepare("SELECT id, email, password, salt, perms FROM users WHERE email = ? LIMIT 1")) 
Смежные вопросы