【问题标题】:MySQL Insert adding 2 Rows Instead of 1MySQL插入添加2行而不是1行
【发布时间】:2020-07-02 08:55:52
【问题描述】:

我知道这个问题已经在 Stack Overflow 上被多次问过,但即使在仔细阅读了所有这些问题之后,我也无法找出我的代码存在的问题。我正在将一个表中的记录插入到另一个表中,但 MySQL 在新表中插入 2 行而不是 1 行。我正在使用 php 准备好的语句插入数据库。我的PHP代码如下:

if(isset($_POST["articleID"]) && isset($_POST["action"]))
        {
            $articleID = $_POST["articleID"];
            $action = $_POST["action"];
            if($action == "publish" && $infoUserRank >= 2)
            {
                $article_sql = "UPDATE blog_db.draft_articles SET status = 1 WHERE articleID = :articleID";
                $article_stmt = $pdo->prepare($article_sql);
                $article_stmt->bindValue(':articleID', $articleID);
                $article_stmt->execute();
                header("Location: http://localhost/admin/pending");
                exit();
            }
            else if($action == "examine" && $infoUserRank >= 3)
            {
                //This is the statement which inserts two records instead of one
                $insertarticle_sql = "INSERT INTO blog_db.articles (userID, full_title, short_title, meta_desc, meta_keywords, cover_pic, content, html_content, main_category) SELECT userID, full_title, short_title, meta_desc, meta_keywords, cover_pic, content, html_content, main_category FROM blog_db.draft_articles WHERE articleID = :articleID";
                $insertarticle_stmt = $pdo->prepare($insertarticle_sql);
                $insertarticle_stmt->bindValue(':articleID', $articleID);
                $insertarticle_stmt->execute();

                $insertsubcat_sql = "INSERT INTO blog_db.article_subcategories (articleID, subCategoryID) SELECT articleID, subCategoryID FROM blog_db.draftarticle_subcategories WHERE articleID = :articleID";
                $insertsubcat_stmt = $pdo->prepare($insertsubcat_sql);
                $insertsubcat_stmt->bindValue(':articleID', $articleID);
                $insertarticle_stmt->execute();

                $deletedraft_sql = "DELETE FROM blog_db.draftarticle_subcategories WHERE articleID = :articleID";
                $deletedraft_stmt = $pdo->prepare($deletedraft_sql);
                $deletedraft_stmt->bindValue(':articleID', $articleID);
                $deletedraft_stmt->execute();

                $deletedraft_sql = "DELETE FROM blog_db.draft_articles WHERE articleID = :articleID";
                $deletedraft_stmt = $pdo->prepare($deletedraft_sql);
                $deletedraft_stmt->bindValue(':articleID', $articleID);
                $deletedraft_stmt->execute();

                header("Location: http://localhost/admin/published");
                exit();
            }
        } 

以及提交此表单的 html 代码:

<div id="confirm-box" class="confirm-popbox">
    <div class="confirm-popbox-div">
        <span id="confirm-close-btn" class="confirm-close-btn"><i class="fas fa-times"></i></span>
        <div class="confirm-main-head"><i class="fas fa-check-square"></i> Confirmation Box</div>
        <hr class="confirm-box-hr" />
        <div class="confirm-main-content">Are you sure you want to publish this article? Once you press on confirm button you can't undo your action.</div>
        <div class="confirm-box-btns">
            <form action="http://localhost/admin/config/article-publish.php" method="POST" id="articlePublishForm1">
                <div id="confirm-cancel-btn" class="publish-confirm-btn1"><i class="fas fa-times"></i> Cancel</div>
                <div id="confirm-publish-btn1" name="publishSubmit" class="publish-confirm-btn1 pub-purple-btn"><i class="fas fa-check"></i> Confirm</div>
            </form>
        </div>
    </div>
</div>
<script>
        $(document).on('click', '#confirm-publish-btn1', function(){
            $("#articlePublishForm1").append('<input type="hidden" name="articleID" value="<?php echo $articleID; ?>" /> ');
            $("#articlePublishForm1").append('<input type="hidden" name="action" value="<?php echo $action; ?>" /> ');
            $("#articlePublishForm1").submit();
        });
</script>

我还尝试在我的 php 代码中添加 exit() 以检查它是否被调用了两次,但 mysql 仍然插入两行而不是一行。我的插入代码有问题吗?非常感谢您的帮助。

【问题讨论】:

  • 您的文章 ID 可能重复。

标签: php html jquery mysql


【解决方案1】:

你有两次$insertarticle_stmt-&gt;execute(); 并且$insertsubcat_stmt 永远不会被执行。

要么重用变量,要么确保它们完全分离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多