通过PHP将mysql表值传递给Javascript

时间:2017-07-23 14:26:23

标签: javascript php html mysql

我正在尝试占用MYSQL表的所有行,最终将它们放在交互式HTML表中。我目前使用$ .post函数将值插入到我的表中没有问题,我只是不能返回它们,至少不是全部。

这是我的JS代码:

function load() {   

            $.post(
            "Returnsmedb.php",
            function (response) {
                var firstname = response.fname;
                var lastname = response.lname;
                var username = response.uname;
                var email = response.email;
                var password = response.password;

                console.log(response);
            }, 'JSON'
        );  
    }

PHP:

<?php
header('Content-type: application/json');

$servername = "localhost";
$username = "SME";
$password = "mypass";
$db = "p3";

// Create connection
$conn =  new mysqli($servername, $username, $password, $db);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 


$sql = "SELECT * FROM pendingusers";
$result = $conn->query($sql);
$response = array();

if ($result->num_rows > 0) {

 while($row = $result->fetch_array()) {
    // $response[] = $row[];
    $response['fname'] = $row["fname"];
    $response['lname'] = $row["lname"];
    $response['uname'] = $row["uname"];
    $response['email'] = $row["email"];

}
    echo json_encode($response);
} else {
    echo "0 results";
}
$conn->close();
?>

我认为最简单的方法是将每一行存储在一个数组中,但我不确定。它当前返回我的$ response数组,但所有值都为null,除了&#39; email&#39;,它具有正确的值,但它来自我的数据库表的最后一行。此外,它只返回一行。

非常感谢任何帮助/指导。

谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题是在这个循环中:

 while($row = $result->fetch_array()) {
    // $response[] = $row[];
    $response['fname'] = $row["fname"];
    $response['lname'] = $row["lname"];
    $response['uname'] = $row["uname"];
    $response['email'] = $row["email"];    
}

您继续覆盖$response中的相同键,因此在循环结束时,只会找到最后一个数据库行的值。你可以通过

解决这个问题
 while($row = $result->fetch_array()) $response[] = $row;

但是,如果您要捕获所有结果,则无需循环遍历它们。只需使用fetch_all,您就可以立即获得完整的表格。

 $response = $result->fetch_all(MYSQLI_ASSOC)

作为旁注,我会非常小心地将未经过过滤的所有内容发送到这样的浏览器。考虑至少在查询中添加LIMIT子句,这样如果您的表有数千行,则不会发送所有内容:

 $sql = "SELECT * FROM pendingusers LIMIT 50";

最后,明确您想要的列,以便在您的数据库将来获得新的敏感列时不泄漏不需要的信息

 $cols = 'fname, lname, uname, email';
 $sql = "SELECT $cols FROM pendingusers LIMIT 50";