我正在尝试占用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;,它具有正确的值,但它来自我的数据库表的最后一行。此外,它只返回一行。
非常感谢任何帮助/指导。
谢谢!
答案 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";