2

我对 mysqli 准备好的语句和结果集的理解是它们都存储在服务器端,这意味着您一次只能有一个可用。当您尝试使用第一个查询的结果循环并执行第二个查询时,这是一种痛苦。

我的代码试图读取第一个结果集,以便可以循环读取。

$sql = 'SELECT VISIT_ID, UPRN, VISIT_REF, VISIT_DATE, START_TIME, END_TIME, NOTES,  REALNAME from V_PREVIOUS_VISITS where UPRN = ?';

/* Prepare statement */
$stmt = $db->prepare($sql);
if($stmt === false) {
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $db->error, E_USER_ERROR);
}

$VisitArray = array();
$stmt->bind_param('i',$_GET['UPRN']);
$stmt->execute();

$result = $stmt->fetch();

while ($row = $result->fetch_assoc()){
    $VisitArray[]= $row;
};

$stmt->free_result();

foreach($VisitArray as $Visititem){
?>
Visit Ref:<?=$Visititem['VISIT_REF']?><br/>
Visit Date:<?=$Visititem['VISIT_DATE']?><br/>
Conducted by:<?=$Visititem['REALNAME']?><br/>
Notes:<?=$Visititem['NOTES']?><br/>
Rates:<br/>
    <?
     }
    ?>

我现在对 mysqli_stmt 类和 mysqli_result 类以及如何使用结果类中的数组方法来处理在语句类中调用的东西感到困惑。我很感激这归因于我对编码类的知识缺乏——抱歉。

4

1 回答 1

0

只是为了得到答案。

你可以试试get_result()。如果它不可用,你必须坚持那个丑陋的 bind_result(),将它与 get_result_metadata() 结合起来等等。bind_result 的手册页上有很多示例代码。

于 2013-09-26T10:40:01.773 回答