我有一个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显示数据?
答案 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)
如果您将PDO与fetchAll()一起使用,那么您将使用您期望的数组返回,也可以安全地使用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