PHP+MySQL-而不是循环

PHP+MySQL-而不是循环,php,mysql,Php,Mysql,我是PHP+MySQL的新手,请原谅我的困惑- 我不明白为什么我的代码不会循环通过“underground_name”列并回显所有行 这是我的密码 <?php include("../includes/header.php"); require('../../mysqli_connect.php'); include("../functions/filter_time.php"); // query the database $query = "S

我是PHP+MySQL的新手,请原谅我的困惑- 我不明白为什么我的代码不会循环通过“underground_name”列并回显所有行

这是我的密码

<?php
    include("../includes/header.php");
    require('../../mysqli_connect.php');
    include("../functions/filter_time.php");

    // query the database
    $query = "SELECT * FROM projects_underground, underground, projects
            LEFT JOIN river ON projects.river_id=river.river_id 
            LEFT JOIN dlr ON projects.dlr_id=dlr.dlr_id 
            LEFT JOIN overground ON projects.overground_id=overground.overground_id 
            LEFT JOIN natrail ON projects.natrail_id=natrail.natrail_id 
            LEFT JOIN tram ON projects.tram_id=tram.tram_id

            WHERE 
            projects_underground.underground_fk = underground.underground_id AND
            projects_underground.projects_fk = projects.projects_id AND
            name = 'Imperial War Museum'";

    $result = mysqli_query($dbc, $query); // put queried result into variable
    $row = mysqli_fetch_assoc($result); // put that into seperate arrays called $row
    $ug = mysqli_fetch_array($result);

    while ($ug = mysqli_fetch_array($result)) {
        echo $ug['underground_name'];
    }
?>
提前谢谢你的帮助

尝试在SQL控制台上运行查询,并检查得到的结果。 尝试转储$ug数组以查看是否正在获取输出。 您将三次调用mysqli_fetch,一次是在初始化$row时调用,一次是在初始化$ug时调用,另一次是在while循环中调用。这将丢失前两行-因此,如果查询结果中只有两行,则不会打印输出。
您需要了解,当您调用mysqli_fetch_assoc$result时;或mysqli_fetch_array$result;您正在从结果堆栈中提取一行。因此,在到达while语句之前,您已经获得了两行。因此,如果查询返回了三个结果,则在循环中只显示一个结果。

尝试运行以下命令以查看返回的行数:

<?php
include("../includes/header.php");
require('../../mysqli_connect.php');
include("../functions/filter_time.php");

// query the database
$query = "SELECT * FROM projects_underground, underground, projects
        LEFT JOIN river ON projects.river_id=river.river_id 
        LEFT JOIN dlr ON projects.dlr_id=dlr.dlr_id 
        LEFT JOIN overground ON projects.overground_id=overground.overground_id 
        LEFT JOIN natrail ON projects.natrail_id=natrail.natrail_id 
        LEFT JOIN tram ON projects.tram_id=tram.tram_id

        WHERE 
        projects_underground.underground_fk = underground.underground_id AND
        projects_underground.projects_fk = projects.projects_id AND
        name = 'Imperial War Museum'";

$result = mysqli_query($dbc, $query); // put queried result into variable

if (is_object($result) && $result->num_rows() > 0) {

    // This line is just for testing, delete from real code
    echo $result->num_rows().' rows have been returned.'.PHP_EOL;

    while ($ug = mysqli_fetch_array($result)) {
        echo $ug['underground_name'];
    }
} else {
    // Do something if no results were returned
}
?>
echo$result->num_rows.“已返回行”。.PHP_EOL

下面是对您的代码的更新,我认为应该通过删除先前对fetch_assoc和fetch_array的调用,并添加一些基本检查,以检查是否已返回任何行来实现:

<?php
include("../includes/header.php");
require('../../mysqli_connect.php');
include("../functions/filter_time.php");

// query the database
$query = "SELECT * FROM projects_underground, underground, projects
        LEFT JOIN river ON projects.river_id=river.river_id 
        LEFT JOIN dlr ON projects.dlr_id=dlr.dlr_id 
        LEFT JOIN overground ON projects.overground_id=overground.overground_id 
        LEFT JOIN natrail ON projects.natrail_id=natrail.natrail_id 
        LEFT JOIN tram ON projects.tram_id=tram.tram_id

        WHERE 
        projects_underground.underground_fk = underground.underground_id AND
        projects_underground.projects_fk = projects.projects_id AND
        name = 'Imperial War Museum'";

$result = mysqli_query($dbc, $query); // put queried result into variable

if (is_object($result) && $result->num_rows() > 0) {

    // This line is just for testing, delete from real code
    echo $result->num_rows().' rows have been returned.'.PHP_EOL;

    while ($ug = mysqli_fetch_array($result)) {
        echo $ug['underground_name'];
    }
} else {
    // Do something if no results were returned
}
?>

感谢您的回复@Machavity.SELECT underground\u name FROM projects\u underground,projects,underground WHERE projects\u underground.underground\u fk=underground.projects\u fk=projects.projects\u id AND projects\u id=5在PHPmyAdmin中创建预期结果-但当I var\u dump$row['undergroundry\u name']我只得到第一排结果?非常困惑…?@CallMePhilip请记住,这些函数一次只返回一行。如果你想要一个数组数组,你必须构建你自己的循环来实现。1。SQL查询-从projects\u underground、projects、underground中选择underground\u名称,其中projects\u underground.underground\u fk=underground.underground\u id和projects\u id=5在PHPmyAdmin-2中创建预期结果。-当我var_dump$row['underground_name']时,我只得到第一行结果?非常困惑…?-mysqli_fetch_row和mysqli_fetch_assoc函数从结果返回一行。对其中一个的后续调用将返回结果中的下一行,如果没有更多行,则返回NULL。因此,当前代码中的$row将包含第一行,$ug将包含while循环之前的第二行,依此类推。