PHP& MySQL查询结果令人困惑

时间:2014-01-09 22:00:24

标签: php mysql sql

使用快速脚本显示我的数据库中客户的最近活动 - 我有脚本输出结果,但它的内容令我感到困惑。

            <?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)。每次运行查询时,结果都是一样的。

4 个答案:

答案 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 = '';

编辑:

谢谢大家,在我提交更正之前,我没有看到你们发帖。 我肯定会保护脚本,我只是确保我可以做我想做的事情:)