从MySQL结果中返回多维数组(PHP)

3

我有一个从数据库提取发票数据的PHP函数。

该发票可能有多个行项目(即多个产品)。

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个回答

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的一些拼写错误。


您更改了他的查询 - 请解释您更改了什么以及为什么更改,并添加关于SQL注入的说明会非常棒。 - Dvir
在这个问题中,以及在这里,在 while 循环内部的 $rw 应该是 $row;否则它将无法工作。 - Stecman
这是一个复制/粘贴错误!我已经修复了。对于查询,当我们选择要使用的列时,它更有效:)) - Ali Ben Messaoud

3
如果你使用PDOfetchAll(),你会得到一个期望的数组,并且不会受到安全威胁。
<?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是您的主键,则不应具有多个行,它应该是唯一的。

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 );
}

1

首先将变量设为全局变量,然后在函数中访问它。例如:

$return_arr = array(); // outside function 
$i = 0;
cal_recursive();  // call function first time

function cal_recursive(){
      global $return_arr;
      global $i;
       $return_arr[$i] = // here push value to array variable
       $i++;

        // do code for recursive function 

return $return_arr // after end
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接