php& pdo& mysql countrows返回0

时间:2014-07-16 21:09:59

标签: php mysql pdo count

我现在已经花了几个小时没有到达任何地方。 我想在查询中显示行数,这里是我的代码:

 <?php 

        $user_id = 1;


        $statement = $dbConn->query("select badoo_interest.*, badoo_category.icon_class from badoo_interest, badoo_user_interest, badoo_category where badoo_user_interest.interest_id = badoo_interest.id and badoo_user_interest.user_id = :id_user_profile and badoo_category.id = badoo_interest.category_id");
        $statement->execute(array(':id_user_profile'=> $id_user_profile));


        $rResult = $statement->fetchAll();
        echo count($rResult);
        echo "<h2>Interesi</h2>";
        while( $row = $statement->fetch(PDO::FETCH_ASSOC) ){

            ?>
                <div class="interest" id = "int<?php echo $row['id'];?>">
                    <span class = "intr-ico <?php echo $row['icon_class'];?>"></span>
                    <?php echo $row['name'];?>
                </div>
            <?php
        }


    ?>

我获得了第10名,但现在我没有得到任何兴趣。 如果您现在使用此代码:

<?php 

    //$user_id = 1;


        $statement = $dbConn->query("select badoo_interest.*, badoo_category.icon_class from badoo_interest, badoo_user_interest, badoo_category where badoo_user_interest.interest_id = badoo_interest.id and badoo_user_interest.user_id = :id_user_profile and badoo_category.id = badoo_interest.category_id");
        $statement->execute(array(':id_user_profile'=> $id_user_profile));
        echo "<p>"  . $statement->rowCount(). " interests:</p>";


        while( $row = $statement->fetch(PDO::FETCH_ASSOC) ){

            ?>
                <div class="interest" id = "int<?php echo $row['id'];?>">
                    <span class = "intr-ico <?php echo $row['icon_class'];?>"></span>
                    <?php echo $row['name'];?>
                </div>
            <?php
        }


    ?>

现在我已经显示了所有的兴趣,但它很重要:0个兴趣。 我能计算多少兴趣的想法吗?

3 个答案:

答案 0 :(得分:1)

如果你阅读 PDOStatement::rowCount 的文档,你会看到这一行

  

如果关联的PDOStatement执行的最后一条SQL语句是   一个SELECT语句,一些数据库可能会返回行数   由该声明返回。 但是,这种行为不是   保证适用于所有数据库,不应依赖于便携式数据库   应用

解决方法是像你一样从PHP发送count()函数。如果这不起作用,请使用COUNT(*) as result_count。然后当你获取读取该值时。


  

我得到了第10名,但现在我没有得到任何兴趣

<强>问题

结果未显示的原因是您已经提取了所有行,因此无法再次使用fetch()

<强>溶液

使用fetchAll()返回的数组,而使用foreach代替

$rows = $statement->fetchAll();
echo "<p>"  . count($rows). " interests:</p>";

foreach ($rows as $row){
//echo $row['name']
}

答案 1 :(得分:0)

<?php 

    //$user_id = 1;


        $statement = $dbConn->query("select badoo_interest.*, badoo_category.icon_class from badoo_interest, badoo_user_interest, badoo_category where badoo_user_interest.interest_id = badoo_interest.id and badoo_user_interest.user_id = :id_user_profile and badoo_category.id = badoo_interest.category_id");
        $statement->execute(array(':id_user_profile'=> $id_user_profile));
        echo "<p>"  . $statement->rowCount(). " interests:</p>";
        $counter = 0; //declare counter

        while( $row = $statement->fetch(PDO::FETCH_ASSOC) ){
                 $counter++; //increment counter
            ?>
                <div class="interest" id = "int<?php echo $row['id'];?>">
                    <span class = "intr-ico <?php echo $row['icon_class'];?>"></span>
                    <?php echo $row['name'];?>
                </div>
            <?php
        }


    ?>

[注意:@DinoAmino编辑删除了围绕$counter两种用法的强调字符,导致代码无法为问题提问者编译]

答案 2 :(得分:0)

我解决了这个问题:

这是更新的解决版本。谢谢大家的输入:

<?php 

    $user_id = 1;

    $statement = $dbConn->query("select badoo_interest.*, badoo_category.icon_class from badoo_interest, badoo_user_interest, badoo_category where badoo_user_interest.interest_id = badoo_interest.id and badoo_user_interest.user_id = :id_user_profile and badoo_category.id = badoo_interest.category_id");
    $statement->execute(array(':id_user_profile'=> $id_user_profile));

    $rows = $statement->fetchAll();
    if(count($rows) >= '1') {

    ?>
        <div class="your-interests">
            <?php

            echo "<p>"  . count($rows). " interests:</p>";
            foreach ($rows as $row){

                ?>
                    <div class="interest" id = "int<?php echo $row['id'];?>">
                        <span class = "intr-ico <?php echo $row['icon_class'];?>"></span>
                        <?php echo $row['name'];?>
                    </div>
                <?php
            }


            ?>
        </div>
    <?php } ?>