我遇到了SELECT
查询的问题。查询仅输出一个结果,而不是此数据库中的所有行。
有谁知道为什么?
$select_comments_sql = "
SELECT *
FROM home_comments
ORDER BY id DESC
";
if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
//$select_comments_stmt->bind_param("s", $user_id);
$select_comments_stmt->execute();
if (!$select_comments_stmt->errno) {
//echo "error";
}
$select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);
$comment_array = array();
while ($select_comments_stmt->fetch()) {
$comment_array[] = $comment_user_id;
$comment_array[] = $comment_username;
$comment_array[] = $home_comments;
$comment_array[] = $comment_date;
}
if ($home_comments === NULL) {
echo 'No comments found.';
} else {
echo $comment_username. "<br>";
echo $home_comments. "<br><br><br>";
}
}
AJAX
$("#comment-form").on("submit", function (event) {
event.preventDefault();
var home_comment = $("#home_comment").val();
$.ajax({
url: "ajax-php/comment-send.php",
type: "POST",
data: {
"home_comment": home_comment
},
success: function (data) {
// console.log(data); // data object will return the response when status code is 200
if (data == "Error!") {
alert("Unable to post comment!");
alert(data);
} else {
$("#comment-form")[0].reset();
//$('.newsletter-popup').fadeIn(350).delay(2000).fadeOut();
}
},
error: function (xhr, textStatus, errorThrown) {
alert(textStatus + " | " + errorThrown);
console.log("error"); //otherwise error if status code is other than 200.
}
});
});
PHP
$user = new User();
$home_comment = $_POST['home_comment'];
$username = $user->data()->username;
$okay = true;
if ( $okay ) {
$comment_insert = "
INSERT INTO home_comments
(id, user_id, username, comment, date)
VALUES(?, ?, ?, ?, NOW())
";
$comment_stmt = $con->prepare($comment_insert);
$comment_stmt->bind_param('ssss', $id, $user_id, $username, $home_comment);
$comment_stmt->execute();
}
答案 0 :(得分:1)
您正在输出while循环之外的结果。由于您将整个结果集存储到$comment_array[]
中,因此您也可以将其转储,以获取从DB获取的所有注释,或者将它们输出到循环内。
if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
//$select_comments_stmt->bind_param("s", $user_id);
$select_comments_stmt->execute();
if (!$select_comments_stmt->errno) {
//echo "error";
}
$select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date);
$comment_array = array();
while ($select_comments_stmt->fetch()) {
$comment_array[] = $comment_user_id;
$comment_array[] = $comment_username;
$comment_array[] = $home_comments;
$comment_array[] = $comment_date;
if ($home_comments === NULL) {
echo 'No comments found.';
} else {
echo $comment_username. "<br>";
echo $home_comments. "<br><br><br>";
}
}
// Alternatively: print_r($comment_array);
}
答案 1 :(得分:1)
您编写的代码存在几个问题。首先,您要在$comment_array
数组中附加每列的值。您应该在while循环中创建一个子数组,并在$comment_array
中创建一个子数组以生成多维数组。
其次,您只显示$comment_username
的值,该值将是while循环中的最后一个用户名。
您应该遍历$comment_array
并单独显示每个用户名和评论。
代码看起来像这样,
$comment_array = array();
while ($select_comments_stmt->fetch()) {
$sub_array=array();
$sub_array["userid"] = $comment_user_id;
$sub_array["username"] = $comment_username;
$sub_array["comments"] = $home_comments;
$sub_array["date"] = $comment_date;
$comment_array[]=$sub_array;
}
if ($home_comments === NULL) {
echo 'No comments found.';
} else {
echo $comment_username. "<br>";
echo $home_comments. "<br><br><br>";
// Loop over comments array.
foreach($comment_array as $comment) {
echo $comment["username"]. "<br>";
echo $comment["comments"]. "<br><br><br>";
}
}