从MySQL结果php返回一个多维数组

时间:2012-06-22 01:16:17

标签: php mysql arrays multidimensional-array

我有一个PHP函数,可以从DB中提取发票的数据。

发票可能有多行(一种产品)。

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 ;

}

我找到了此链接Create a Multidimensional Array with PHP and MySQL,我使用该概念制作了此代码。

现在,如果在MySQL结果中有更多内容,如何将光标移动到下一行并添加更多行?

如果可能的话,我该如何用HTML显示数据?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

如果您将PDOfetchAll()一起使用,那么您将使用您期望的数组返回,也可以安全地使用nastys:

<?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不应该超过1行,如果它是您的主键,它应该是唯一的。

答案 2 :(得分:3)

如果您正在使用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 );
}

答案 3 :(得分:1)

首先使变量全局化然后在函数中访问它。对于exp。

aes