请查看下面的代码。通过该课程,我可以显示如下结果:
$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循环中一样显示。
答案 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;
}