`while`没有显示回声

时间:2013-07-17 16:21:57

标签: php pdo

我的回声出现了我的麻烦。我认为while存在问题,但该表位于mysql中,因此它应该正常工作。这是我的代码

    <?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>'; ?>

while应该显示,因为mysql中存在该主题。当我使用var_dump($sql->errorInfo()); 时,它会说array(3) { [0]=> string(5) "00000" [1]=> NULL [2]=> NULL } null是因为我在mysql中创建了主题作为测试。

2 个答案:

答案 0 :(得分:1)

$result = $sql->rowCount();

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

$ result被分配一个行数;但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. 

我认为你所需要的只是:

elseif($result === 0){

我认为发生的事情是您的查询没有结果,但对count()的调用无效。它正在通过该检查,并且因为没有要检索的记录,所以它不会进入循环。

答案 1 :(得分:0)

count($results) === 0没有任何意义,因为$result已经包含整数。您的SQL查询返回0行,但由于count(0)1,因此您的脚本不知道该怎么做,因为情况未被涵盖。

只需使用count($results) === 0更改$results === 0,然后继续找出查询未返回预期行的原因。