我找不到我的功能没有获得所有结果的原因。当我进入页面查看评论时,我只看到最不满意的评论。如果我删除该评论,则会显示下一条最新评论。我确信这件事很简单,我没有注意到。
function getComments($inPostID=null)
{
$commentArray = array();
if (!empty($inPostID))
{
//echo " Get comments for the post with the postID of ". $inPostID;
$stmt = db::connect()->prepare("SELECT * FROM Comments WHERE postID = ? ORDER BY commentDate DESC");
$stmt->bind_param('i', $inPostID);
$stmt->execute();
$stmt->bind_result($commentID, $postID, $userID, $commentDate, $commentContent);
while($stmt->fetch())
{
echo"HI ";
$thisComment = new ViewComment($commentID, $postID, $userID, $commentDate, $commentContent);
array_push($commentArray, $thisComment);
}
$stmt->close();
}
return $commentArray;
}
答案 0 :(得分:4)
我已经弄清楚了。我正在打开一个绑定语句,然后在ViewComment()函数中打开另一个绑定语句以从其他表中获取更多信息。修复方法是将bindResults存储到一个数组中,该数组将由while填充,然后关闭该bind语句。然后在for循环中循环遍历while的结果,该循环调用ViewComment(),其中pramitors是来自bindResults数组的数组。
代码如下。
function getComments($inPostID=null)
{
$commentArray = array();
$tempArray = array();
if (!empty($inPostID))
{
//echo " Get comments for the post with the postID of ". $inPostID;
$stmt = db::connect()->prepare("SELECT * FROM Comments WHERE postID = ? ORDER BY commentDate DESC");
$stmt->bind_param('i', $inPostID);
$stmt->execute();
$stmt->bind_result($commentID, $postID, $userID, $commentDate, $commentContent);
while($stmt->fetch())
{
$bindResults = array($commentID, $postID, $userID, $commentDate, $commentContent);
array_push($tempArray, $bindResults);
}
$stmt->close();
$total = count($tempArray);
for($i = 0; $i < $total; $i++)
{
$thisComment = new ViewComment($tempArray[$i][0], $tempArray[$i][1], $tempArray[$i][2], $tempArray[$i][3], $tempArray[$i][4]);
array_push($commentArray, $thisComment);
}
}
return $commentArray;
}
答案 1 :(得分:0)
fetch()将只获取一条记录,以获取所有记录使用fetchAll(),更改代码
while($stmt->fetchAll())
答案 2 :(得分:0)
请改变 array_push($ commentArray,$ thisComment); 到
foreach($ thisComment as $ k =&gt; $ v) array_push($ commentArray,$ v);
答案 3 :(得分:0)
我认为您应该使用以下
$stmt->bind_param(1, $inPostID);
而不是
$stmt->bind_param('i', $inPostID);