【问题标题】:Reading mysqli prepared statement into array将mysqli准备好的语句读入数组
【发布时间】:2013-07-19 04:15:39
【问题描述】:

我对 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 类以及如何使用结果类中的数组方法来处理在语句类中调用的东西感到困惑。 我很感激这是因为我对编码类缺乏了解 - 抱歉。

【问题讨论】:

  • +1 仅用于正确的错误处理。在所有这些死机中偶尔看到 trigger_error 真是一种解脱
  • 你可以试试get_result()。如果它不可用,你必须坚持那个丑陋的 bind_result()
  • 看来:$result = $stmt-&gt;get_result(); 可以解决问题-谢谢。所以看起来 get_result 会创建一个 mysqli_result 类呢???

标签: php arrays mysqli fetch


【解决方案1】:

只是为了得到答复。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2016-04-05
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多