PHP/MySqli对照表B ID检查表a ID
我有以下功能,显示数据库中的博客帖子:PHP/MySqli对照表B ID检查表a ID,php,mysql,Php,Mysql,我有以下功能,显示数据库中的博客帖子: function show_blog_posts() { include('connection.php'); $sql = "SELECT blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by FROM blog LEFT OUTER JOIN
function show_blog_posts() {
include('connection.php');
$sql = "SELECT blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by
FROM blog LEFT OUTER JOIN article_comments
ON blog.content_id = article_comments.comment_id
WHERE blog.content != ''
ORDER BY blog.content_id DESC";
$result = mysqli_query($dbCon, $sql);
while ($row = mysqli_fetch_array($result)) {
echo
"<h5 class='posted_by'>Posted by " . $posted_by = $row['posted_by'] . " on " . $row['date'] . "</h5>" .
"<h1 class='content_headers'>" . $title = $row['title'] . "</h1>" .
"<article>" . $content = $row['content'] . "</article>" .
"<div class='commented_by'>Posted by: " . $row['comment_by'] . "</div>" .
"<div class='comments'>Comments: " . $row['comments'] . "</div>";
}
}
我正在尝试将表A ID与表B ID链接,因此如果ID不匹配,用户将无法发布。如果我的ID不匹配,即使没有文章可以发表,用户仍然可以发表评论
我还编写了以下函数来获取comments表的ID和articles表的ID
function get_article_id($username) {
include('db_connection.php');
$username = sanitize($username);
$sql = "SELECT content_id FROM `blog` WHERE content_id = '$content_id'";
$query = mysqli_query($dbCon, $sql);
return (mysqli_result($query, 0, 'content_id'));
}
function get_comment_id($comment_id) {
include('db_connection.php');
$comment_id = sanitize($username);
$sql = "SELECT comment_id FROM `article_comments` WHERE comment_id = '$comment_id'";
$query = mysqli_query($dbCon, $sql);
return (mysqli_result($query, 0, 'comment_id'));
}
如何检测表A id并将其与表B id进行比较?如果
另外,我的代码有什么问题,因为sql查询没有执行 首先我想告诉你,一个博客可以有多个评论。因此,您需要小心地与注释表建立关系
article\u comments
表的外键id为“content\u id”
现在,将您的show\u blog\u posts
函数的查询更改为类似的无注释关系查询,然后使用另一个查询在while
循环中获取其注释
这是代码
function show_blog_posts()
{
include('connection.php');
$sql = "SELECT blog.title, blog.content, blog.content_id, blog.posted_by, blog.date
FROM blog
WHERE blog.content != ''
ORDER BY blog.content_id DESC";
$result = mysqli_query($dbCon, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_array($result)) {
echo
"<h5 class='posted_by'>Posted by " . $posted_by = $row['posted_by'] . " on " . $row['date'] . "</h5>" .
"<h1 class='content_headers'>" . $title = $row['title'] . "</h1>" .
"<article>" . $content = $row['content'] . "</article>";
$sql = "SELECT article_comments.comments, article_comments.comment_by
FROM article_comments
WHERE article_comments.content_id =" . $row['content_id'] . "
ORDER BY article_comments.comment_id DESC";
$comments = mysqli_query($dbCon, $sql);
echo "<div>"; //comments panel
if (mysqli_num_rows($result) > 0) {
while ($comment = mysqli_fetch_array($comments)) {
echo "<div class='commented_by'>Posted by: " . $comment['comment_by'] . "</div>";
echo "<div class='comments'>Comments: " . $comment['comments'] . "</div>";
}
}
echo "</div>"; //comments panel ends
}
}
}
function insert_comments($comment_by, $comments, $content_id) {
include('db_connection.php');
$sql = "INSERT INTO article_comments (content_id, comments, comment_by) VALUES ($content_id, '$comments', '$comment_by');";
mysqli_query($dbCon, $sql);
}
当您在get\u article\u id
中传递username
时,让您根据username
与content\u id
进行比较
function get_article_id($username) {
include('db_connection.php');
$username = sanitize($username);
//if username is unique
$sql = "SELECT content_id FROM `blog` WHERE username = '$username'";
$query = mysqli_query($dbCon, $sql);
return (mysqli_result($query, 0, 'content_id'));
}
您必须在get\u comment\u id
中传递username
而不是comment\u id
,因为您要检索comment\u id
。当您知道注释id时,就不需要调用此函数。我相应地改变了它
function get_comment_id($username) {
include('db_connection.php');
$username = sanitize($username);
$sql = "SELECT comment_id FROM `article_comments` WHERE username = '$username'";
$query = mysqli_query($dbCon, $sql);
return (mysqli_result($query, 0, 'comment_id'));
}
INSERT
语句仅适用于INSERT。您不能使用where
子句在表B上创建引用表a的外键。@Don'tPanic我已尝试创建外键:ALTER table article\u comments ADD CONSTRAINT comment\u blog\u fk foreign key(blog\u id)references wt.blog(content\u id)on DELETE on UPDATE CASCADE上无操作代码>但我得到了错误#1452-无法添加或更新子行:外键约束失败(worldtour
#sql-22a4_47b
,约束注释_blog_fk
外键(blog_id
)引用blog
(content_id
)关于删除,不执行更新级联操作)。你知道为什么吗?这意味着你有孤儿的记录,在处理这些孤儿之前你无法创建FK。谢谢你对艾哈迈德的精彩解释。但是,我得到了以下两个错误:注意:未定义索引:中的content\u id和警告:mysqli\u fetch\u array()期望参数1为mysqli\u result,给定布尔值。知道原因吗?select语句中未选择内容id。结果是空的,所以首先必须检查它是否有超过零的记录,然后继续。我已相应地更新了我的答案。现在看看
function get_comment_id($username) {
include('db_connection.php');
$username = sanitize($username);
$sql = "SELECT comment_id FROM `article_comments` WHERE username = '$username'";
$query = mysqli_query($dbCon, $sql);
return (mysqli_result($query, 0, 'comment_id'));
}