为什么PHP没有正确显示所有值?

为什么PHP没有正确显示所有值?

问题描述:

Unfortunately my code isn't working quite well.

The source code:

<!DOCTYPE html>
<html>
<head>
    <title>Query data from News database and display in table</title>
    <meta charset="UTF-8">
    <meta name="description" content="" />
    <meta name="author" content="WRBikAir" />
    <meta name="keywords" content="" />
<style> 
    table, th, td{
        border: 1px solid black;
    }
</style>
</head>

<body>
    <?php
        error_reporting(E_ALL);
        echo "Test 1";
        $con = mysqli_connect("mysql.hostinger.com","u441817146_admin","CBGApp","u441817146_cbg");
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        $sql = "SELECT * FROM News";
        if ($result = mysqli_query($con, $sql)) {
            echo "<table>";
            while($row = $result->fetch_assoc()) {
                $r = json_encode($row);
                echo "<tr><td>" . $r['NID'] . "</td><td>" . $r['headline'] . "</td><td>" . $row['text'] . "</td><td>" . $r['timestamp'] . "</td></tr>";
            }
            echo "</table>";
        } else {
            echo "no result.";
        }
        mysqli_close($con);
        echo "2";
    ?>
</body>
</html>

Everything works fine, except of the output of the NID, headline and timestamp. There are all '{'. Does it mean, that there is now value? because if I simply print them out (encoded of course) there are values e.g.:

{"NID":"1","headline":"Testartikel 2","text":"test test test","timestamp":"15.11.2017, 18:13"}

Does somebody knows a solution?

For everybody who need the working answer.

Thank you to MasterOfCoding, GrumpyCrouton, Paul Spiegel and prodigitalson. Special thanks to tadman for the insider information.

Now the code:

<!DOCTYPE html>
<html>
    <head>
        <title>Query data from News database and display in table</title>
        <meta charset="UTF-8">
        <meta name="description" content="" />
        <meta name="author" content="WRBikAir" />
        <meta name="keywords" content="" />

        <style> 
            table, th, td{
                border: 1px solid black;
            }    
        </style>
    </head>
    <body>
        <?php
            error_reporting(E_ALL);
            echo "Test 1";
            $con = mysqli_connect("...","...","...","...");
            if (mysqli_connect_errno()) {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }

            $sql = "SELECT * FROM News";
            if ($result = mysqli_query($con, $sql)) {
                echo "<table>";
                while($row = $result->fetch_assoc()) {
                    echo "<tr><td>" . $row['NID'] . "</td><td>" . $row['headline'] . "</td><td>" . $row['text'] . "</td><td>" . $row['timestamp'] . "</td></tr>";
                }
                echo "</table>";
            } else {
                echo "no result.";
            }
            mysqli_close($con);
            echo "2";
        ?>
    </body>
</html>

You are using $result 2 times on $result = mysqli_query($con, $sql) and in your foreach loop. I changed the one in the foreach loop to $results instead of $result.

Also try turning on error reporting using:

error_reporting(E_ALL);

Try using:

<!DOCTYPE html>
<html>
<head>
<title>Query data from News database and display in table</title>
<meta charset="UTF-8">
<meta name="description" content="" />
<meta name="author" content="WRBikAir" />
<meta name="keywords" content="" />

<style> 
    table, th, td{
        border: 1px solid black;
    }
</style>
</head>

<body>
    <?php
        echo "Test 1";
        $con = mysqli_connect(CENSORED (but working in other classes fine);
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        $sql = "SELECT * FROM News";
        if ($result = mysqli_query($con, $sql)) {
            $resultArray = array();
            $tempArray = array();
            while($row = $result->fetch_object()) {
                $tempArray = $row;
                array_push($resultArray, $tempArray);
            }
            echo "<table>";
            foreach ($resultArray as $results) {
                $r = json_encode($results);
                echo "<tr><td>" . $results['headline'] . "</td><td>" . $results['text'] . "</td></tr>";
            }
            echo "</table>"
        }
        mysqli_close($con);
        echo "2";
    ?>
</body>
</html>