2015-09-03 43 views
0

使用PDO的簡單登錄表單。回聲輸出工作正常。進入else case但不進入foreach循環。 var_dump的輸出給出了這個。php mysql pdo結果集,其中一行沒有輸入foreach

回波輸出

1rows SelectedEntered全成環

的var_dump輸出

對象(PDOStatement對象)[3]公開 '的queryString'=>字符串「選擇* from tour_login where username ='admin'and password ='a DMIN'和 狀態= 1' (長度= 81)

if(isset($_POST['login'])) 
       { 
        $un=$_POST['un']; 
        $pass=$_POST['pass']; 
        $res=DB::getInstance()->query("select * from tour_login where username='$un' and password='$pass' and status=1"); 
        $num_rows = $res->fetchColumn(); 

        echo $num_rows."rows Selected"; 
        if($num_rows<=0) 
        { echo "Entered error loop"; 
         echo "<script>alert('invalid username and password');document.location='index.php';</script>"; 
         return false; 
        } 
        else 
        { 


         echo "Entered successfull loop"; 
          foreach ($res as $row) { 

           echo "Entered successfull for loop"; 
             if($row['type']==0) 
         { 

          $_SESSION['admn']=$un; 
          echo "<script>alert('welcome admin...');document.location='adminhome.php';</script>"; 
         } 
         else 
         { 
          $_SESSION['usr']=$un; 
          echo "<script>alert('welcome user...');document.location='userhome.php';</script>"; 
         } 


          } 

        } 

       } 

什麼我不理解就是爲什麼的foreach不與行表示one.New到Php.I的一些工作中發現使用mysql_num_rows的替代()in pdo在這個StackOverflow問題 https://stackoverflow.com/questions/11305230/alternative-for-mysql-num-rows-using-pdo

回答

1

你的第一個問題是,作爲一個新手,你只是從你找到的代碼中搶走一行,不知道它是做什麼。這條線永遠不會返回找到的行數,但這條線對您的困惑負責,因爲它會提取您選擇的所有數據,而不會爲foreach循環留下任何內容。儘管你也不需要後者。

你的第二個問題是,你在一個非常普遍的錯覺下,認爲你需要返回的行數。事實上,你並不需要它。

你的第三個問題是你應該使用準備好的語句,但你不是。

你需要的代碼是

$sql = "select * from tour_login where username=? and password=? and status=1"; 
$res = DB::getInstance()->query($sql); 
$res->execute(array($un, $pass)); 
$row = $res->fetch(); 
if(!$row) { 
    echo "Entered error loop"; 
    echo "<script>alert('invalid username and password');document.location='index.php';</script>"; 
    return false; 
} 

等。只需刪除無用的foreach循環,然後設置即可。

+0

布羅謝謝你的努力和分數。我想出了這個問題,我自己會刪除這個問題,但問題是我不能這樣做,因爲它可能會導致問題ban.You是現貨,所以我投票並接受它作爲答案。我正在做的是我正在改變一個現有的PHP項目,用pdo替換不推薦使用的mysql_函數,我沒有任何新的做法,因爲附加了一個很小的時間框架。添加到我開始使用PHP一週回來。所以我不熟悉語言的易用性,而不檢查那些代碼的真正用途,我用它作爲解決方案,並最終結束 –

+0

花費更多的時間.Bro我想問你另一件事,如果有一排有四列和你想第三列訪問然後$ res-> fetchColumn(3)。是否有技巧??從我的看法每次調用fetchColumn()它指向下一行和它的列? –