【问题标题】:Mysqli prepared statement: store rows in an array and loop through this array laterMysqli准备好的语句:将行存储在一个数组中,稍后循环遍历这个数组
【发布时间】:2015-02-03 05:54:53
【问题描述】:

我使用准备好的语句来选择数据库中的行。随后,我想使用 while 循环来回显各个行。这工作正常,直到我尝试在 while 循环的执行中使用新查询(这是必要的,因为我提取了用户 ID,我需要将其转换为用户名。我通过对用户表执行查询来做到这一点,但是当我尝试这个时,我的代码没有运行)。我想我可以通过将所有行存储在一个数组中来解决这个问题,然后在我的代码循环中遍历这个数组。但是,我似乎无法弄清楚如何遍历该数组的所有索引并在循环的每个实例中提取该行的所有字段。

非常感谢!这是我的代码:

$results = array();

$stmt = $db->prepare("SELECT admissionID,userID,description,link,postingdate,compensation FROM replies WHERE projectID=?");
$stmt->bind_param('i',$projectID);
$stmt->execute();
$stmt->bind_result($admissionID,$userID,$description,$link,$postingdate,$compensation);
while($row = $stmt->fetch()){
    $results[] = $row;
}

foreach($results as $result) {
    echo $result['admissionID'];
}

【问题讨论】:

  • 仅供参考:mysqli_result::fetch_all 存在,所以你的while 循环有点不必要。

标签: php arrays mysqli while-loop


【解决方案1】:

这就是你需要做的事情

 ids=array();
 while($row = $stmt->fetch()){
    ids[]= $row['userID'];
 }

ids 是一个数组,它将包含您需要的所有 id。 但我会说“不要那样做”,只需使用表连接来获取用户名,例如您的情况可能会像

SELECT   replies.admissionID,users.name,replies.userID,replies.description,
replies.link,replies.postingdate,replies.compensation FROM replies, users 
WHERE 
users.name=replies.userID
and replies.projectID=?

【讨论】:

  • 您好,感谢您的回复!我不熟悉这种执行查询的方式,但它似乎是有道理的。但是,users.name 包含用户名,而 replies.userID 包含用户 ID,它们永远不会相同。如果我像这样运行代码,我的页面将保持空白。有没有我遗漏的步骤?
  • 您需要迭代 id 而不是结果,因为 id 现在在 IDS 数组中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多