2013-07-17 4 views
1

에코가 나타나기 시작하는데 문제가 있습니다. 나는 거기에 문제가있는 것 같아 while하지만 테이블은 mysql에 정상적으로 작동해야합니다. 이것은 내 코드`While` 에코가 보이지 않습니다.

입니다
<?php 


$sql = $db->prepare('SELECT 
      topic_id, 
      topic_subject 
     FROM 
      topics 
     WHERE 
      topics.topic_id = :topid'); 
$sql->bindParam(':topid', $_GET['id'], PDO::PARAM_INT); 
$sql->execute(); 
$result = $sql->rowCount(); 



     if($result === FALSE){ 
      echo 'The topic could not be displayed, please try again later.'; 
     } 
     elseif(count($result) === 0){ 
      echo 'This topic doesn&prime;t exist.'; 
     } 
    else 
     { 
     while($row = $sql->fetch()) 
     { 
      //display post data 
      echo '<table class="topic" border="1"> 
        <tr> 
         <th colspan="2">' . $row['topic_subject'] . '</th> 
        </tr>'; ?> 

주제는 MySQL의 존재 때문에 while가 표시되어야합니다. 내가 var_dump($sql->errorInfo()); 을 사용할 때 array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL } null은 테스트로서 mysql에서 주제를 생성했기 때문이다.

+0

그래서 스크립트는 무엇을 표시합니까? –

+0

@ alessandro1997 이상하게 들리지만 아무것도 표시하지 않습니다 – jacmob

답변

1
$result = $sql->rowCount(); 

elseif(count($result) === 0){ 

$ 결과에 행 수가 할당됩니다. count()은 배열의 요소를 계산하도록 설계되었습니다.

elseif($result === 0){ 

내가 무슨 일이 일어나고 생각하면 쿼리 결과가없는 것입니다,하지만 count()에 대한 호출이 작동하지 않는 경우 : manual

If var is not an array or an object with implemented Countable interface, 1 will be returned. There is one exception, if var is NULL, 0 will be returned. 

에서 나는 모두 당신이 필요하다고 생각합니다. 그 검사를 통과하고 검색 할 레코드가 없기 때문에 루프에 들어 가지 않습니다.

+0

감사합니다! 지금 일하고있어. – jacmob

+0

기꺼이 도와 드리겠습니다! – andrewsi

0

count($results) === 0은 의미가 없습니다. $result에는 이미 정수가 포함되어 있습니다. SQL 쿼리는 0 행을 반환하지만 count(0)1이므로 상황에 해당하지 않기 때문에 스크립트는 수행 할 작업을 모릅니다.

count($results) === 0$results === 0으로 변경하고 쿼리가 예상 행을 반환하지 않는 이유를 찾아보십시오.

관련 문제