PHP mysqli准备语句noget working

时间:2016-01-19 22:29:49

标签: php mysql mysqli

希望你能帮助我:)

我有一个功能,它在过去有效,但这次我得到了有线行为..

它返回e.commenttime但没有别的..

function Get_Comment($mysqli, $event_id){
  if ($stmt = $mysqli->prepare("SELECT e.text, e.commenttime, m.username FROM eventcomment e INNER JOIN members m ON e.memberid = m.id WHERE e.eventid =$event_id ORDER BY e.commenttime ")); {
    $stmt->bind_result($comment, $commenttime, $commentuser);
    // Execute the prepared query.
    $stmt->execute();
        //grab a result set
    $resultSet = $stmt->get_result();

        // Returning array
  $events = array();

       // Fetch results
  while ($row=mysqli_fetch_array($resultSet,MYSQLI_ASSOC)) {

    $e = array();
    $e['comment'] = $row['comment'];
    $e['commenttime'] = $row['commenttime'];
    $e['commentuser'] = $row['commentuser'];
    // Merge the event array into the return array
    array_push($events, $e);
  // print_r($e);
  }
  // return array"
  return $events;
}
}

确保我通过phpMyAdmin

运行的数据是合理的
  

SELECT e.text,e.commenttime,m.username FROM eventcomment e INNER   JOIN成员m ON e.memberid = m.id WHERE e.eventid = 15 ORDER BY   e.commenttime

这里它返回了所有字段的完整数据..

最诚挚的问候 Bjarke

1 个答案:

答案 0 :(得分:1)

我认为唯一的问题是您使用的数组键与查询中的列名不匹配。您只获得评论时间,因为这是唯一 匹配的评论时间。

您可以修改$row的密钥以匹配查询中的列名,如下所示:

while ($row=mysqli_fetch_array($resultSet,MYSQLI_ASSOC)) {
    $e = array();
    $e['comment'] = $row['text'];
    $e['commenttime'] = $row['commenttime'];
    $e['commentuser'] = $row['username'];

另外,看起来你将结果绑定到变量然后不使用它们。如果您从所提取的数组中获取所有值,那么我就不会想到

$stmt->bind_result($comment, $commenttime, $commentuser);

实际上是必要的。