2012-11-04 60 views
0

好吧,這讓我感到困惑,我想知道如果有人可以啓發我爲什麼它發生。我正在做一個登錄頁面,檢查數據庫中的匹配值,如果SELECT查詢返回一個帶有用戶名和密碼的匹配行,那麼它將返回1的行數。我現在編碼的方式是當我回顯變量存儲行計數它會回聲26出於某種原因,我不知道爲什麼。如果有人可以看看代碼,並解釋我是否做錯了什麼,或者如果這是正常的行爲,並且價值從何而來,我將不勝感激。PDO行數混淆

function checkLogin($conn,$myusername,$mypassword,$row,$row1){ 
    try { 
     $sql = "SELECT COUNT(*) FROM CLL_users WHERE user_name = 'user' AND password = 'XXXX'"; 
     if ($results = $conn->query($sql)) { 

      if($results->fetchColumn() > 0) { 

       $sql = "SELECT * FROM CLL_users WHERE user_name = 'user' AND password = 'XXXXX'"; 
       foreach ($conn->query($sql) as $row) 
       {    
        $rowCount = count($row); 
        echo $rowCount; 
        print ("Username: " . $row['user_name'] . "<br>"); 
        print ("Username: " . $row['password'] . "<br>"); 

        } 

        echo $count; 
      } 
     else { 
      print "NO ROWS"; 
     } 
     } 
     } catch (PDOException $e){ 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

} 
+0

好吧,我可能已經想通了,但如果有人可以證實,這將是真棒,我思考它,因爲我調用了'select'語句兩次,並且我的數據庫中有13行,所以2x13 = 26這個假設是否準確? – Yamaha32088

回答

1
function checkLogin($conn,$myusername,$mypassword,$row,$row1) 
{ 
    try 
    { 
     $sql = "SELECT COUNT(*) FROM CLL_users WHERE user_name = 'user' AND password = 'XXXX'"; 
     if ($results = $conn->query($sql)) 
     { 

      $count = $results->fetchColumn(); 
      echo "$count\n"; 

      if($count > 0) 
      { 
       $sql = "SELECT * FROM CLL_users WHERE user_name = 'user' AND password = 'XXXXX'"; 
       foreach ($conn->query($sql) as $row) 
       {    
        print ("Username: " . $row['user_name'] . "<br>"); 
        print ("Username: " . $row['password'] . "<br>");  
       } 
      } 
      else 
      { 
       print "NO ROWS"; 
      } 
     } 
    } 
    catch (PDOException $e) 
    { 
     echo 'Connection failed: ' . $e->getMessage(); 
    } 

} 
2

您的代碼,$rowCount = count($row);,計數列當前行中 - 由查詢返回的行數量不限。

在同一張紙條上,您正在迴應第二個計數相關變量,$count,但您既不聲明也不在代碼中增加它。它看起來像是應該計算循環行數的那個。如果這是事實,你應該將其設置爲$count = 0;循環之前,並在其中使用$count++;

$count = 0; 
foreach ($conn->query($sql) as $row) { 
    print ("Username: " . $row['user_name'] . "<br>"); 
    print ("Username: " . $row['password'] . "<br>"); 
    $count++; 
} 
echo $count; 

此外,您正在使用PDO的rowCount之前,選擇用戶和你正確地使用它。你可以結果只是存儲到一個變量,並用它來告訴你多少行接收:

$sql = "SELECT COUNT(*) FROM CLL_users WHERE user_name = 'user' AND password = 'XXXX'"; 
if ($results = $conn->query($sql)) { 
    $numRows = $results->fetchColumn(); 
    if($numRows > 0) { 
     ... rest of your code .... 
+0

好吧我一直在嘗試2個小時才能得到由查詢返回的行的結果什麼纔是正確的方式得到這是什麼? – Yamaha32088

+0

我一直在閱讀rowCount無法用於PDO select statments – Yamaha32088

+0

非常好的建議感謝您的提示我正在實施PHP手冊中的代碼,但它沒有給出預期的結果。 – Yamaha32088