2013-07-12 3 views
-1

Мой код работает, но он работает только для первой строки. Когда я вставляю другую строку в MySQL и пытаюсь войти в систему с другим именем пользователя и паролем, она возвращает мою ошибку. Что не так?PHP PDO :: FETCH_ASSOC Issue

<?php 
    include_once('db.php'); 

     $username = $_POST['username']; 
     $password = sha1($_POST['password']); 

      if(!empty($username) && !empty($password)) { 

       $loginSQL = "SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password'"; 

       if($db->query($loginSQL)->fetchColumn() == 1) { 

        $fetchUsers = $db->query($loginSQL)->fetch(PDO::FETCH_ASSOC); 
         $userID = $fetchUsers['uid']; 
          $_SESSION['uid'] = $userID; 
           echo '<br /><br />You have successfully logged in. <a href="inner.php">Click here</a> to proceed.'; 


      } 

       else { 

        echo '<br /><br />You have entered invalid log-in information.'; 

     } 

    } 

    else { 

     echo '<br /><br />You have entered invalid log-in information.'; 

    } 



?> 

ответ

2

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

0

Здесь есть несколько проблем.

fetchColumn() возвращает первый столбец первой строки, который может или не может быть 1 в зависимости от того, как настроена таблица БД.

fetch() возвращает текущую строку, указатель строки PDOStatement включен. Если вы не отправите его в следующую строку, он не будет перемещаться.

Вы посылаете такую ​​же ошибку по две разные причине, помогая привести к путанице.

Что действительно поможет вам, если вы измените свой код, как @Your Common Sense, и посмотрите на него. Это поможет вам лучше понять проблему.

+0

Для этого конкретного случая проверки учетных данных считается довольно хорошей практикой не предоставлять слишком точной информации. Итак, одно обобщенное сообщение об ошибке –

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