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()ありません。のように特定の行と列に移動することはできません。 それを解決する方法は 2 つあります。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();

なぜカウント変数を使用するのかわかりませんでした。それぞれにaを試してください。

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