3

DBから請求書のデータを抽出するPHP関数があります。

請求書には複数の行 (1 つの製品) が含まれる場合があります。

function getInvoiceLines($id)
{
   $res = mysql_query("select * from invoice_lines where id = $id ");
   while ($row = mysql_fetch_array($res))
   {
      $res_retun['ref']=$row['ref'];
      $res_retun['label']=$row['label'];
      $res_retun['price']=$row['label'];
      $res_retun['qty']=$row['qty'];
   }

return $res_retun ;

}

このリンクを見つけましたPHPとMySQLで多次元配列を作成し、その概念を使用してこのコードを作成しました。

では、カーソルのようなものを次の行に移動し、MySQL の結果にさらに行がある場合は行を追加するにはどうすればよいですか??

可能であれば、for を使用して HTML でデータを表示するにはどうすればよいですか??

4

4 に答える 4

9

少し変更すると、必要なものが得られるはずです。[]演算子の下には、要素を配列に追加するための簡略表記があります。コードの問題は、反復ごとに同じキーを上書きしていることです。

   // fetch only what you need;
   $res = mysql_query("select ref, label, price, qty from invoice_lines where id = $id ");
   while ($row = mysql_fetch_array($res))
   {
      $res_return[] = $row;
   }
   return $res_return;

入力ミスの一部を修正したことに注意してください(元のコードのループの$rw代わりに使用していました)$row

于 2012-06-22T01:20:08.780 に答える
3

fetchAll()でPDOを使用した場合は、期待どおりの配列が返されます。厄介なことからも安全です。

<?php //Cut down
$db = new PDO("mysql:host=localhost;dbname=dbName", 'root', 'pass');

$sql = "SELECT * FROM invoice_lines WHERE id = :id ";

$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();

$res_return = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

次に、他の配列と同様に配列をループします。

<?php 
foreach($res_return as $row){
echo $row['ref'];
...
...
}
?>

またid、主キーの場合は一意である必要があります。

于 2012-06-22T01:28:49.307 に答える
2

あるべきように PDO を使用していた場合、それは非常に簡単で、SQL インジェクションの問題を解決できます。

$db = new PDO(...);
function getInvoiceLines( $db,  $id )
{
    $stmnt = $db->prepare("select ref, label, price, qty from invoice_lines where id=?");
    $stmnt->execute( array( $id ) );
    return $stmnt->fetchAll( PDO::FETCH_ASSOC );
}
于 2012-06-22T01:31:55.753 に答える