1

我无法让我的回声出现。我认为有问题,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 中创建了主题作为测试。

4

2 回答 2

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

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

$result 被分配了一个行数;但count()旨在计算数组中的元素。从手册

 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()不起作用。它通过了该检查,并且由于没有要检索的记录,因此它不会进入循环。

于 2013-07-17T16:28:54.133 回答
0

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

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

于 2013-07-17T16:31:28.417 回答