Php 为什么这个查询会产生看似随机的结果?

Php 为什么这个查询会产生看似随机的结果?,php,mysql,sql,database,Php,Mysql,Sql,Database,这对我来说毫无意义,但是这个查询显示了一些完整的记录,有些是部分的,有些是单行的。似乎没有节奏或理由。更糟糕的是,当我在MySql中运行查询时,它运行得很好,根本没有问题。目前我认为它是一个恶魔和/或超级恶魔 $sql = "SELECT phonenumber,date,dataplan AS currentplan, SUM(datamb) AS value_sum FROM maindata2 WHERE email='".($_POST['email'])."' GROUP BY ph

这对我来说毫无意义,但是这个查询显示了一些完整的记录,有些是部分的,有些是单行的。似乎没有节奏或理由。更糟糕的是,当我在MySql中运行查询时,它运行得很好,根本没有问题。目前我认为它是一个恶魔和/或超级恶魔

$sql =  "SELECT phonenumber,date,dataplan AS currentplan, SUM(datamb) AS value_sum FROM maindata2 WHERE email='".($_POST['email'])."' GROUP BY phonenumber,date";

$result = mysql_query($sql);

$row = mysql_fetch_assoc($result);

$query = mysql_query($sql) or die(mysql_error());

$header_printed = false;

while($row = mysql_fetch_array($query)) {
    if ($row['phonenumber']) {
        if ($header_printed === false) {

            echo "   
            <table id='display'>
            <tr>
            <th>Phone Number:</th>
            <th>Data Plan:</th>
            <th>Data Usage This Period:</th>
            <th>Remaining:</th>
            <th>Date Reporting:</th>
            </tr>";

            $header_printed = true;
        }
    }
} 

while ($row = mysql_fetch_assoc($result)){
    echo "<tr>";
    echo "<td>".$row['phonenumber'] . "</td> ";
    echo "<td>".$row['currentplan'] . "MB</td> ";
    echo "<td>".ROUND ($row["value_sum"],2) . "MB</td> ";
    echo "<td>".($row['currentplan'] - ROUND ($row["value_sum"],2)) . "MB</td>";
    echo "<td>".$row['date'] . "</td></tr>";
}
echo "</table>";
$sql=“选择phonenumber,date,dataplan作为当前计划,SUM(datamb)作为maindata2中的值,\u SUM,其中email=”($\u POST['email'])。“'GROUP BY phonenumber,date'”;
$result=mysql\u查询($sql);
$row=mysql\u fetch\u assoc($result);
$query=mysql\u query($sql)或die(mysql\u error());
$header_printed=false;
while($row=mysql\u fetch\u array($query)){
如果($row['phonenumber'])){
如果($header_printed===false){
回声“
电话号码:
数据计划:
此期间的数据使用情况:
剩下的:
报告日期:
";
$header_printed=true;
}
}
} 
while($row=mysql\u fetch\u assoc($result)){
回声“;
回显“$row['phonenumber']”;
回显“$row['currentplan']”MB;
回音“.”四舍五入($row[“value_sum”],2)。“MB”;
echo.“($row['currentplan']-四舍五入($row[“value_sum”],2)).”MB;
回显“$row['date']”;
}
回声“;

任何想法都比我现在拥有的多

请注意,循环中存在导致创建多个表的循环,这可能是一个原因,另一个注意,为什么要进行两次相同的查询,这在db引擎上是一个无用的过头?!最后一点要注意的是,在没有清理的情况下,永远不要直接在查询中使用用户输入。

您的问题似乎是同一个查询运行了两次。在这一行:

$row = mysql_fetch_assoc($result);
获取结果集的第一个结果行,但实际上根本不使用它

您还可以混合使用
$query
$result


在循环遍历结果集之前,可能需要输出表头。然后循环一次结果集,输出每一行。

数据库中的数据格式是否正确?字段末尾没有多余的换行符?你能和phpMyAdmin核实一下吗?你能提供一个表的结构样本,这样我们就可以测试并了解到底是什么问题吗?此外,您正在循环中创建一个标记。通常,您希望在循环之前创建表标记。为什么要使用相同的查询查询数据库两次,并生成两个结果集?为什么有这行代码($code>$row=mysql\u fetch\u assoc($result)并且什么也不做(它最终只会推进您的结果集指针)?通过使用外部变量构建SQL语句,您将面临SQL注入攻击。此外,任何带有单引号的输入数据,如“O'Malley”的名称,都会破坏您的SQL查询。请了解如何使用参数化查询(最好是PDO模块)来保护您的web应用程序。有一些例子可以让你开始学习,并且有很多详细的例子。@MikeBrant就是这样!我不需要它,它引起了一个问题!非常感谢。