首页 > 解决方案 > 在 PHP 中嵌套 MySQLi 的正确方法

问题描述

我有一个关于在另一个查询中嵌套 MySQLi 查询的问题可能是相当基本的回答。我不确定这是否是最佳实践,如果有人可以通过让我知道下面的示例是否运行良好,或者是否有更好的方法来提供帮助,我将不胜感激。

表一:学生

id | linked_teacher | student_name | student_age
1  | 1              | Bob Eaves    | 15 
2  | 1              | Ellen Robs   | 11
3  | 2              | Will Tops    | 7
4  | 3              | Scott Long   | 13

表 2:教师

id | teacher_name
1  | Mrs Green
2  | Mr Wood
3  | Dr Grey
4  | Professor Long

然后我的 PHP 如下所示,目前:

$sql = "SELECT linked_teacher, student_name, student_age FROM students";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $linked_teacher = $row["linked_teacher"];

    $sql2 = "SELECT teacher_name FROM teachers WHERE teacher_name = $linked_teacher";
    $result2 = $conn->query($sql2);
    if ($result2->num_row > 0) {
      while($row2 = $result2->fetch_assoc()) {
        $teacher_name = $row2["teacher_name"];
      }
    }

    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}

这将输出以下内容:

Mrs Green - Bob Eaves - 15
Mrs Green - Ellen Robs - 11
Mr Wood - Will Tops - 7
Dr Grey - Scott Long - 13

现在,虽然我很欣赏我的示例实际上并不需要两张表,但如果我能理解回答这个示例的正确方法,我确信我在我的解决方案中没有这样做,那么我可以将该理论应用于更复杂的解决方案。

提前致谢。

标签: phpmysqldatabasemysqli

解决方案


使用一个循环并加入表格。您的代码更快(注释 3)且更简单。正如上面第二条评论指出的那样,一定要跟进并了解如何处理受污染的数据。祝你好运!

 $sql = "SELECT teacher_name, student_name, student_age FROM students JOIN teachers ON linked_teacher = teachers.id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}

推荐阅读