2012-11-04 3 views
0

좋아,이게 내가 혼란스럽고 누군가 내가 그 일이 일어난 이유를 밝혀 줄 수 있는지 궁금해하고 있었다. SELECT 쿼리가 사용자 이름과 암호가 일치하는 행을 반환하면 행 수가 1로 반환되는 경우 데이터베이스에서 일치하는 값을 확인하는 로그인 페이지를 만들고 있습니다. 행 개수를 반환합니다. 어떤 이유로 든 에코 될 행 수를 저장하고 이유를 모르겠습니다. 누군가가 코드를보고 내가 잘못된 것을하고 있는지 또는 이것이 정상적인 행동인지 그리고 그 가치가 어디에서 왔는지 설명해 주시면 감사하겠습니다.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 문장들에서 사용될 수 없다는 것을 읽고있다. – Yamaha32088

+0

팁을 주셔서 감사합니다. PHP 매뉴얼에서 코드를 구현하고 있었지만 의도 한 결과를 얻지 못했습니다. – Yamaha32088