使用快速脚本显示我的数据库中客户的最近活动 - 我有脚本输出结果,但它的内容令我感到困惑。
<?php
//Search for customer recent history
$q = "SELECT * FROM txn_log WHERE customer_no = $customer_no ORDER BY datetime DESC LIMIT 3";
$r = mysql_query($q) or die(mysql_error());
while($row = mySQL_fetch_array($r)) {
$recent_history = '';
$str .= '<a href="#" class="list-group-item">';
$str .= ' <span class="badge">' . gmdate("Y-m-d\TH:i:s\Z", $row['datetime']) . '</span>';
$str .= ' <i class="fa fa-check"></i> ' . $row['txn_id'] . ': ' . $row['txn_type'] . ' ' . $row['amount_dif'];
$str .= '</a>';
echo $str;
}
?>
在我的数据库中,我有一个测试客户,其中有三个与之关联的记录,从ID 2开始。
我上面的查询应该按照使用的UNIX时间戳顺序输出三条记录, 应按以下顺序生成三条记录=&gt; ID2,ID3,ID4
它正在做的是输出以下=&gt; ID2,ID2,ID3,ID2,ID3,ID4
除了正确的结果之外,我不明白我做错了让它产生前三个(ID2,ID2,ID3)。每次运行查询时,结果都是一样的。
答案 0 :(得分:1)
您正在使用$ str。=
等等 循环的第一次迭代,回显的$ str是ID2 第二次迭代,$ str被回显为ID2 + ID3 第三次迭代,$ str被回显为ID2 + ID3 + ID4最后,它看起来像ID2,ID2,ID3,ID2,ID3,ID4 希望有所帮助!
要解决此问题,请尝试在循环开始时将变量声明为$ str =“”,然后您的回显将仅回显每个ID一次。
答案 1 :(得分:1)
为每个循环迭代重置$ str。 添加:
$str="";
$recent_history = '';
之后
答案 2 :(得分:1)
您需要使用mysql_fetch_assoc,并在循环外回显
要记住的事情很少,
安全性必须是您的顶级修道院,检查SQL注入字符并始终在查询中用单引号括起您的变量。见下文
<?php
//Search for customer recent history
$customer_no = str_replace("'", '', $customer_no);
$q = "SELECT * FROM txn_log WHERE customer_no = '$customer_no' ORDER BY datetime DESC LIMIT 3";
$r = mysql_query($q) or die(mysql_error());
while($row = mySQL_fetch_assoc($r)) {
$recent_history = '';
$str .= '<a href="#" class="list-group-item">';
$str .= ' <span class="badge">' . gmdate("Y-m-d\TH:i:s\Z", $row['datetime']) . '</span>';
$str .= ' <i class="fa fa-check"></i> ' . $row['txn_id'] . ': ' . $row['txn_type'] . ' ' . $row['amount_dif'];
$str .= '</a>';
}
echo $str;
?>
答案 3 :(得分:0)
Woops ......发现它..
Derp in my While()
我正在清理错误的字符串!
$recent_history = '';
应该是$str = '';
编辑:
谢谢大家,在我提交更正之前,我没有看到你们发帖。 我肯定会保护脚本,我只是确保我可以做我想做的事情:)