我试图获取 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 数组,但所有值都是空,除了“email”,它具有正确的值,但它来 self 的数据库表的最后一行。此外,它只返回一行。
任何帮助/指导将不胜感激。
谢谢!
最佳答案
你的问题是在这个循环中:
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";
关于javascript - 通过 PHP 将 mysql 表值传递给 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266161/