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'));
}