外键与MySQL相关

时间:2015-05-18 20:47:48

标签: php mysql pdo

我试图在这里插入两个表,一个是创建一个文档,它进入我的doc_list表,另一个从复选框中获取ID,并将它们发布到连接表中。

问题是连接表需要一个id来形成我正在创建的帖子,但我根本无法提供它,所以我收到了错误。

问题在于:$docId = $dbh->lastInsertId();

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(dashboardrcat_doc_link_table,CONSTRAINT cat_doc_link_table_ibfk_2 FOREIGN KEY({{ 1}})参考link_doc_iddoc_list)ON UPETE CASCADE ON UPDATE CASCADE)

如果我将其更改为:doc_id

  

SQLSTATE [23000]:完整性约束违规:1048列'link_doc_id'不能为空

以下是我发布的表格:

$docId = $_POST["doc_id"];

以下是操作表单的脚本:     

<?php include 'header.php'; ?>
<?php 

require_once '../../db_con.php'; 

try{
    // Selecting entire row from cat_list table
    $results = $dbh->query("SELECT * FROM cat_list");

}catch(Exception $e) {
    echo $e->getMessage();
    die();
}

$category = $results->fetchAll(PDO::FETCH_ASSOC);

?>


<h3 class="subTitle">
    <i class="fa fa-pencil"></i></span> Create New Document
</h3>

<form action="actions/newDocAdd.php" method="post" id="rtf" name="">

    <input type="text" name="doc_title" id="doc_title" required="required" placeholder="Document Title"/><br />

    <input type="hidden" name="action" value="doc_id"/>

<label><input type="checkbox" name="" class="selectall"/> Select all</label>

<div id="checkboxlist">
    <?php
        foreach($category as $cat){ 
    ?>

    <input type="checkbox" value="<?php echo $cat["cat_id"]; ?>" name="cat_no[]"><?php echo $cat["cat_title"]; ?></a>
    <br>

    <?php
    }
    ?>
</div> 

    <textarea name="doc_content" id="doc_content" placeholder="Document Content" style="display: none;"></textarea>
    <iframe name="editor" id="editor" style="width:100%; height: 600px;"></iframe>

    <br><br> 
    <input onclick="formsubmit()" type="submit" value="Create Document" name="submit"/>


</form>

我对关系表相当新,所以请保持温和,因为我真的想了解错误以及如何纠正这个问题,因为我非常接近解决问题。

2 个答案:

答案 0 :(得分:2)

试试这个:

Calendar now = Calendar.getInstance();
Calendar tomorrow = (Calendar)now.clone();
tomorrow.add(Calendar.DATE, 1);

答案 1 :(得分:1)

在尝试使用INSERT之前,您需要执行第一个$dbh->lastInsertId

$sql = "INSERT INTO doc_list (doc_title, doc_content, doc_created, user_id)
                VALUES (:doc_title, :doc_content, NOW(), :user_id)";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(':doc_title' => $_POST["doc_title"],
                     ':doc_content' => $_POST["doc_content"],
                     ':user_id' => $_SESSION["user"]));
$docId = $dbh->lastInsertId;

此代码应位于代码中的foreach循环之前。你应该摆脱对$dbh->query($sql)的呼吁。