MYSQLi多个记录输出重复

时间:2014-12-09 08:40:33

标签: php html mysql mysqli

问题:

我不断查看我的代码,无法找到数组复制数据的原因。输入数据库的单个输出具有正确的输出,但是如果有多个输入,则会在它之前和下一个输入之前复制它们。

我的代码:

global $connection;
        //Query database & retrieve results.
        $search = $connection->query('SELECT * FROM users WHERE country= "'.$country.'"');
                echo '<table><tr><th>Username</th><th>Email</th><th>Country</th></tr>';
                while ($result = $search->fetch_assoc())
                    {
                        $total[] = $result;
                        foreach ($total as $rows)
                            {
                                echo '<tr>';
                                echo '<td>'.stripslashes($rows['username']).'</td>';
                                echo '<td>'.stripslashes($rows['email']).'</td>';
                                echo '<td>'.stripslashes($rows['country']).'</td>';
                                echo '</tr>';
                            }
                    }
                echo '</table>';

输出:

这将返回以下表格 -

Username         Email                     Country
exampleUser1 exampleEmail1@example.com United States
exampleUser1 exampleEmail1@example.com United States
exampleUser2 exampleEmail2@example.com United States

您可以看到第一行重复,然后新条目就在那里,它将继续从此开始。

其他信息:

  • 这是放在一个函数内部,并在提交$ _POST [&#39; country&#39;]时执行 - $ country只是$ _POST [&#39; country&#39;],带有real_escape_string。< / LI>
  • $ connection只是脚本中引用的一个新的mysqli(localhost,user,pass,database) - 它是全局化的,因为它包含在一个函数中。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

<?php
    //... Your code
    while ($rows = $search->fetch_assoc()) {
        $rows = array_map('stripslashes', $rows);
        echo '<tr>';
        echo '<td>'.$rows['username'].'</td>';
        echo '<td>'.$rows['email'].'</td>';
        echo '<td>'.$rows['country'].'</td>';
        echo '</tr>';
    }
    //... Your code

如果您需要保存并从函数返回,则此行只创建数组$ total并在$total[] = $rows;之后添加echo '</tr>';

答案 1 :(得分:0)

正如我在评论中提到的那样,将foreach放在你的while循环之外:

echo '<table><tr><th>Username</th><th>Email</th><th>Country</th></tr>';
while ($result = $search->fetch_assoc()) {  
    $total[] = $result;
}

foreach ($total as $rows) {
    echo '<tr>';
    echo '<td>'.stripslashes($rows['username']).'</td>';
    echo '<td>'.stripslashes($rows['email']).'</td>';
    echo '<td>'.stripslashes($rows['country']).'</td>';
    echo '</tr>';
}
echo '</table>';

另一个解决方案就是一直重新声明您的$ total。只需保留您的代码然后执行:

$total = $result;