でテーブルに追加、私は3つのテーブルを持っています。それらは、削除と更新の両方で「制限」に設定されています。これは、書籍によって使用されている間、AuthorsまたはPublishersテーブルから行を削除または変更しようとすると、あなたが停止することを意味します。問題を単純化するために外部キー
私はテーブルブックに新しい本を追加したいが、私がしようとするたびに私が取得:
Error: SQL Error: Errno: 1452 Error: Cannot add or update a child row: a foreign key constraint fails
(emilyc_library.Books, CONSTRAINT publisher_foreign_key FOREIGN KEY (pub_id) REFERENCES Publishers (pub_id))
私はpub_idカラム外部キーを無効にして、ちょうどAUTHOR_IDにしようとすると、同じことが起こります。
両方の外部キーを無効にするとすべて動作します。
挿入したいときに外部キーを無効にするためのhack-yの回答がほとんど見られました。どちらも実用的ではなく、外部キー制約の目的を破っています。
この問題の原因は何ですか。それは本当にあなたが外部キーの制約を持つテーブルに更新できないMySQLの設計ですか?
EDIT:私の挿入コードは次のようになります。addbooksrv.phpで
:addbookclt.php、AUTHOR_IDとpub_idカラムで
<?php
include 'dbconnect.php';
$sql = "insert into Books (isbn,name,author_id,pub_id) values
('" .
$_REQUEST["isbn"] . "','" .
$_REQUEST["name"] . "','" .
$_REQUEST["author_id"] . "','" .
$_REQUEST["pub_id"] .
"')";
if (!$result = $mysqli->query($sql)) {
echo "Error: SQL Error: </br>";
echo "Errno: " . $mysqli->errno . "</br>";
echo "Error: " . $mysqli->error . "</br>";
exit;
}
?>
は、利用可能なIDを表示するボックスを選択しています
<table>
<form action="addbooksrv.php">
ISBN: <input type="int" name="isbn"/></br>
Book: <input type="text" name="name"/></br>
Author: <select author_id="author_id"/>
<?php
include "dbconnect.php";
$sql = "select * from Authors";
$result = myquery($mysqli,$sql);
while($row = $result->fetch_assoc()) {
echo "<option value = '" . $row["author_id"] . "'>" . $row["id"] . "
</option>";
}
?>
</select>
</br>
Publisher: <select pub_id="pub_id"/>
<?php
$sql = "select * from Publishers";
$result = myquery($mysqli,$sql);
while($row = $result->fetch_assoc()) {
echo "<option value = '" . $row["pub_id"] . "'>" . $row["pub_id"] . "
</option>";
}
?>
</select>
</br>
<input type="submit"/>
</form>
</table>
これは自明ですが、出版社には存在しないpub_idの本を追加しようとしています – Peter
これらの小さな問題はすべて解決しました。変数名が正しく入力されているか、存在するpub_idを追加していますか?それらがすべて正しいことを確認しました。この場合、私は5人の出版社と5人の著者(両方とも1-5とラベル付けされています)を持っており、私は両方のフィールドに「1」を追加してテストしています。編集:これは、起こるはずではないことを知るのに役立ちます! –
挿入クエリを表示できますか? – Peter