【问题标题】:Duplicated result from MySql phpMySql php的重复结果
【发布时间】:2017-07-11 03:34:55
【问题描述】:

我的 SQL 语句有问题。当我回显结果时,会出现重复的结果(2 个相同的结果)。

下面是我的代码:

$stmt = $DB_con->prepare("SELECT * FROM applicantpersonaldetails apd "
        . "LEFT JOIN employementdetails ed ON apd.ApplicantID = ed.ApplicantID "
        . "LEFT JOIN sourceoffunds sof ON apd.ApplicantID = sof.ApplicantID "
        . "LEFT JOIN existingbankproducts ext ON apd.ApplicantID = ext.ApplicantID "
        . "WHERE apd.AccountID ='{$accountId}' AND applicantType ='main';");        

$stmt->execute();

if ($stmt->rowCount() > 0) {
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        extract($row);

        echo $row['EmploymentStatus'];
        ?>
        <?php
    }
} else {
    ?>
    <div class="">
        <div class="alert alert-warning">
            <span class="glyphicon glyphicon-info-sign"></span> &nbsp; No Data Found ...
        </div>
    </div>
    <?php
} 
?>

【问题讨论】:

  • 警告:使用 PDO 时,您应该使用带有占位符值的 prepared statements,并将任何用户数据作为单独的参数提供。在此代码中,您可能有严重的SQL injection bugs。永远不要使用字符串插值或连接,而是使用 prepared statements 并且永远不要将 $_POST$_GET 数据直接放在查询中。有关此问题和其他问题的指导,请参阅 PHP The Right Way
  • 您的数据中有重复的行,或者由于连接而得到重复的行。没有看到你的数据是不可能的。将 MySQL 工作台或 MySQL 控制台中的查询分解成更小的部分,直到您看到问题所在的关系或表。
  • 我很好奇你为什么在这里使用 extract()。它不会导致您的问题,但在您的 while 循环范围内没有必要也没有帮助。

标签: php html mysql sql database


【解决方案1】:

可能是,我错了,请考虑一下。

第一:

AND applicantType ='main' - 这件作品看起来很可疑,因为它没有定义它的表格,因此,应该为“unknown column”投诉它

第二:

当您应用的查询找到多个结果时,通常会显示多个结果。您的查询根本不排除这种情况。首先,您使用SELECT * - 这意味着找到所有。其次,你不用LIMIT,也就是find all。最后,使用SELECT DISTINCT,这样可以消除重复。

https://dev.mysql.com/doc/refman/5.7/en/distinct-optimization.html

还有:

使用var_dump()进行调试。

希望,这会有所帮助。

【讨论】:

    【解决方案2】:

    表格有问题,有重复数据。 existingbankproducts 有 2 个来自同一申请人的数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-18
      • 2019-03-21
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      相关资源
      最近更新 更多