繁体   English   中英

PHP返回的结果少于mysql

[英]PHP returning less results than mysql

我有一个mysql查询,当我在mysql控制台中运行时返回4个结果,而这正是我所需要的,但是当我在PHP中尝试时,我只会得到2个结果。 我的PHP看起来有什么问题吗? 我已将查询回显到一个字符串,并将其粘贴到控制台中,它也提供了我所需的内容。 当我回显返回的行数时,它是2。

<?php
if(isset($_POST['source'])){
    $source = $_POST['source'];
}

if(isset($_POST['destination'])){
    $destination = $_POST['destination'];
}

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "Airport Tracking";
$table ="Flights";
$flag = 0;

// Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);
if ($mysqli->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(isset($_POST['source']) && isset($_POST['destination'])){
$columns= $mysqli -> query("SHOW COLUMNS FROM $table");

$sql = "SELECT *
    FROM Flights a
    JOIN Flights b
    ON a.Destination = b.Source
    AND {$source} = a.Source
    AND {$destination} = b.Destination";

$result = $mysqli -> query($sql);


if($result == FALSE){
    echo "<br><b>Incorrect input</b>";
    $flag = 1;
}
else if($result->num_rows == 0){
    echo "<br><b>Returned no results</b>";
    $flag = 1;
}

}

$array = array();
$i = 0;

if(isset($_POST['source']) && $flag == 0){
 // Display results
echo "<table>";
echo "<thead><tr>";
while ($row = $columns -> fetch_array(MYSQLI_BOTH)) {
    echo "<th>" .$row['Field']. "</th>";
    $array[] = $row['Field'];
}
echo "</tr></thead>";

while ($row = $result -> fetch_array(MYSQLI_BOTH)) {
    echo "<tr>";
    while ($i < sizeof($array)) {
        echo "<td>" .utf8_encode($row[$array[$i]]). "</td>";
        $i++;
    }
    echo "</tr>";
    $i = 0;
}
echo "</table>";

当您从自联接返回列时,请不要使用SELECT * ab中的列相同,但是您需要给它们指定不同的名称。 因此,使用类似:

SELECT a.source AS start, 
       a.flightno AS flight1, 
       a.destination AS connection, 
       b.flightno AS flight2, 
       b.destination AS destination

然后在显示表格的代码中,执行以下操作:

while ($row = $result->fetch_assoc()) {
    foreach ($row as $col) {
        echo "<td>" . utf8_encode($col) . "</td>";
    }
}

您还需要更改显示列标题的代码,以使用与您选择的这些列相对应的标题,而不是从SHOW COLUMNS中获取它们(因为这只会获得一组列名)。

您需要在带有空格的字段名称前后打勾。 您需要像这样更改这些行:

AND `{$source}` = a.Source
AND `{$destination}` = b.Destination";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM