2

我现在正在跳转到 mysqli/PDO,并将 SELECT 循环从“旧”方法转换为 mysqli。

“旧”方法:

$query="SELECT * FROM transactions ORDER BY id DESC LIMIT 10";
$result=mysql_query($query);
$num=mysql_num_rows($result);       

$i=0;

while ($i < $num) {
    $f1=mysql_result($result,$i,"name");
    $f2=mysql_result($result,$i,"surname");
    $f3=mysql_result($result,$i,"pcode");
    $f4=mysql_result($result,$i,"transaction_id");
    $f5=mysql_result($result,$i,"articles");
    $f6=mysql_result($result,$i, "delivery");

    //echo out to table here

    $i++;

}

我已经了解了基本的 mysqli 查询,然后简单地尝试复制上面的 while 循环:

if ($pending_stmt=$mysqli->prepare('SELECT * FROM transactions WHERE status = ?')) {
    $pending_stmt->bind_param('s', $status); //$status is set prior to if statement
    $pending_stmt->execute();
    $pending_stmt->store_result();
    $pending_stmt->fetch_all();

    $rows=$pending_stmt->num_rows();

    $i=0;

    while ($i < $rows) {
        $f1=$pending_stmt->fetch($i,'pcode');

        //echo out to table here

        $i++;
    }
}

不用说,它不起作用......经过大量搜索,我想知道是否有人愿意给我一些指示。

4

2 回答 2

1

难怪它不起作用。你把一切都混在一起了。你不需要store_result(),fetch_all()num_rows(). fetch()无法像以前那样导航到特定的行和列mysql_result()
你有两个选择如何解决它。

  1. 使用get_result()

    $pending_stmt = $mysqli->prepare('SELECT columnA, columnB FROM transactions WHERE status = ?');
    $pending_stmt->bind_param('s', $status); //$status is set prior to if statement
    $pending_stmt->execute();
    $result = $pending_stmt->get_result();
    
    foreach ($result as $row) {
        echo $row['columnA'];
        echo $row['columnB'];
    }
    
  2. 使用store_result(),bind_result()fetch()

    $pending_stmt = $mysqli->prepare('SELECT columnA, columnB FROM transactions WHERE status = ?');
    $pending_stmt->bind_param('s', $status); //$status is set prior to if statement
    $pending_stmt->execute();
    $pending_stmt->store_result(); // recommended, but not necessary
    $pending_stmt->bind_result($f1, $f2);
    
    while ($pending_stmt->fetch()) {
        echo $f1;
        echo $f2;
    }
    
于 2019-12-02T21:07:03.473 回答
-1

尝试

$pending_stmt->execute(array($status));
$result = $pending_stmt->fetchAll();

我不明白您为什么使用 count var,请为每个尝试一个:

foreach($result as $item) {
    $f1 = $item['pcode'];
}
于 2012-11-21T22:27:56.057 回答