使用mysqli从数据库中获取所有结果

时间:2014-03-20 08:37:01

标签: php oop fetch

请查看下面的代码。通过该课程,我可以显示如下结果:

$connectTest    = new testResults();
$test       = $connectTest->grabResults(test, id, id);

echo $test['id'];
echo $test['name'];
echo $test['address'];

在我的数据库中,我在" test"中有几个字段。表。我使用index.php转到我的页面?id = 1。有了这个,我只显示一行的结果,因为它抓取所有结果WHERE id = 1。

我需要的是下面的课程来显示多个结果。它只显示一行。但是,如果我有多行id = 1,我想显示这些结果,但我无法让它工作。我已经尝试了很多东西,但我总是只得到一个结果。

类:

class testResults
{

    public function grabResults($table, $field, $id)
    {
        $result = $this->db->mysqli->query("SELECT * FROM $table WHERE $field = $id");

        $resultData[] = array();

        if(!$result)
        {
            return false;
        }

        while($row = $result->fetch_assoc())
        {
            $rows[] = $row;
        }

            foreach ($rows as $resultData)
            {
                return $resultData;
            }
    }
}

编辑:

Array ( [id] => 25 [name] => test [status] => 1 )
Array ( [id] => 25 [name] => test [status] => 3 )
Array ( [id] => 25 [name] => test [status] => 5 )
Array ( [id] => 25 [name] => test [status] => 4 )

Array ( [id] => 26 [name] => test [status] => 1 )
Array ( [id] => 26 [name] => test [status] => 3 )

Array ( [id] => 27 [name] => test [status] => 1 )
Array ( [id] => 27 [name] => test [status] => 3 )
Array ( [id] => 27 [name] => test [status] => 5 )
Array ( [id] => 27 [name] => test [status] => 4 )
Array ( [id] => 27 [name] => test [status] => 2 )
Array ( [id] => 27 [name] => test [status] => 4 )
Array ( [id] => 27 [name] => test [status] => 1 )

我正在获得如上所述的结果,以任何方式轻松地在回声中显示这些结果?对于每个id,都有不同的结果,因此结果会因每个查询而异。所以我想在表格中显示结果,例如:

echo '<table>
<tr>
<td>$id</td>
<td>$name</td>
<td>$status</td>
</tr>
</table>';

因此所有结果都会像在while循环中一样显示。

4 个答案:

答案 0 :(得分:4)

您可以从函数返回数组,然后在脚本中循环

while($row = $result->fetch_assoc())
{
    $rows[] = $row;
}
return $rows;

您可以在脚本中循环

$test = $connectTest->grabResults(test, id, id);
foreach($test as $value)
{
     print_r($value);
}

OP编辑

如果您需要单独打印它们,您可以使用键来访问具有可变名称和范围的所有元素,如下所示

$test = $connectTest->grabResults(test, id, id);
echo '<table>';
foreach($test as $value)
{
     echo '<tr>
             <td>'.$value['id'].'</td>
             <td>'.$value['name'].'</td>
             <td>'.$value['status'].'</td>
           </tr>';
}           
echo '</table>';

答案 1 :(得分:2)

看起来您正在使用此功能返回单行结果:

        foreach ($rows as $resultData)
        {
            return $resultData;
        }

你应该只返回整个事情。

    while($row = $result->fetch_assoc())
    {
        $rows[] = $row;
    }
    return $rows;

答案 2 :(得分:2)

由于将完整的结果集传递给另一层进行处理,因此可以跳过循环以从结果集中生成关联数组。

class testResults {
    public function grabResults($table, $field, $id) {
        // For the record, I feel a prepared statement is in order here...
        $result = $this->db->mysqli->query("SELECT * FROM $table WHERE $field = $id");    
        if (!$result) {
            return false;
        }
        return $result->fetch_all(MYSQLI_ASSOC);  // just in case you wanted to see the column names
    }
}

然后,当您想从返回的关联数组数组生成html表时,请使用implode()作为一种灵活的解决方案,无论您是否更改传入的列数,它都会处理无限数量的列。

if ($resultset = grabResults("tests", "name", "test")) {
    echo "<table>";
        foreach ($resultset as $i => $row) {
            // if (!$i) { echo "<tr><th>" , implode("</th><th>", array_keys($row)) , "</th></tr>"; }
            echo "<tr><td>" , implode("</td><td>", $row) , "</td><tr>"
        }
    echo "</table>";
}

答案 3 :(得分:1)

在第一次迭代后,return迭代内的

foreach()意味着停止。因此,您将始终只获得第一个结果。

你最好把它写成:

   public function grabResults($table, $field, $id)
   {
        $result = $this->db->mysqli->query("SELECT * FROM $table WHERE $field = $id");

        $rows = array();

        while($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }

        return $rows;
    }