有没有一种方法可以基于MySQLi中的一行获取多个输出

时间:2019-11-23 22:26:07

标签: php mysqli

我目前正在从事一个项目,该项目需要从SQL表中列的ID相同的条目中列出条目。

这是桌子:

+------+------+
|name  |id    |
+------+------+
|Ex1   |1     |
+------+------+
|Ex2   |1     |
+------+------+
|Ex3   |2     |
+------+------+


我尝试了以下代码:

$id = '1';
$query2 = "SELECT * FROM entries WHERE id = '$id'";
$data2=mysqli_query($link,$query2);
$row2=mysqli_fetch_array($data2);
$name = $row2["name"];

但是该代码仅返回Ex2,我希望它返回我在$ id中指定的ID的所有名称

2 个答案:

答案 0 :(得分:1)

通过while循环查看成功的结果。

while($row2=mysqli_fetch_array($data2)){
// echo $name = is valid syntax.
    echo $name = $row2["name"] . "<br>" . "\n";
// The \n used will show clean HTML in source.
}

旁注:您可能必须使用mysqli_fetch_assoc()而不是mysqli_fetch_array()

此外,这样做更安全,因为这可能会使您不愿接受SQL注入。

答案 1 :(得分:0)

您可以使用简单的foreach循环来迭代从数据库中获取的所有结果。

此外,您应该使用带参数绑定的预备语句。

正确的代码应如下所示:

$id = '1';
$stmt = $link->prepare("SELECT * FROM entries WHERE id = ?");
$stmt->bind_param('s', $id);
$stmt->execute();
$result = $stmt->get_result();

foreach ($result as $row2) {
    $name = $row2["name"];
    // do something with the name
    echo $name.PHP_EOL;
}

或者,如果需要,您可以将所有结果收集到一个数组中。

$allNames = [];
foreach ($result as $row2) {
    $allNames[] = $row2["name"];
}