我的回声出现了我的麻烦。我认为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′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中创建了主题作为测试。
答案 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
,然后继续找出查询未返回预期行的原因。