2012-11-04 61 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