【发布时间】:2020-03-03 02:51:51
【问题描述】:
我有一个关于学生信息和他们所学科目的模拟数据库。
我想创建一个代码,让我可以注册新主题并使用外键将两列链接到其他表。但是,它不起作用,我收到一条错误消息。
我已经多次测试了我的连接,并且可以正常工作。选择代码直接在 mysql 工作台中工作。下面是我的代码和数据库的图片。
我得到的错误信息:
致命错误:C:\wamp\www\oveove.php 中的未捕获异常 'mysqli_sql_exception' 带有消息 'Duplicate entry '0' for key 'PRIMARY'' 第 159 行 (!) mysqli_sql_exception: 键的重复条目“0” 'PRIMARY' 在 C:\wamp\www\oveove.php 第 159 行
<form method="post">
<form method="post">
<input type="text" name="fagnavn" placeholder="skriv inn fagets navn">
<input type="text" name="type" value="skriv inn fagklassen">
<select name="lærer">
<?php
$sql="select * from lærer";
$resultat = $kobling->query($sql);
while ($rad = $resultat->fetch_assoc()) {
$lærerfnavn=$rad["fnavn"];
$lærerenavn=$rad["enavn"];
$idlærer= $rad["idlærer"];
$heltnavn = $lærerfnavn. " ". $lærerenavn;
echo "<option value='$idlærer'> $heltnavn </option>";
}
?>
</select>
<select name="studieret">
<?php
$sql= "select * from studieret";
$resultat= $kobling->query($sql);
while ($rad= $resultat->fetch_assoc()) {
$leder= $rad["leder"];
$id=$rad["idstudieretning"];
echo "<option value='$id'> $leder </option>";
}
?>
</select>
<input type="submit" name="sendinn2" value="Send inn">
</form>
<?php
if (isset($_POST["sendinn2"])) {
$fag= $_POST["fagnavn"];
$type= $_POST["type"];
$lærer=$_POST["lærer"];
$studieret=$_POST["studieret"];
$sql="insert into fag (fagnavn, type, idlærer, idstudieretning) values ('$fag', '$type', '$lærer', '$studieret')";
echo "$sql";
if ($kobling->query($sql)) {
echo "kobblingen $sql ble gjennomført";
}
else {
echo "det var et problem med kobling $sql($kobling->error_message)";
}
}
?>
【问题讨论】:
-
您尝试插入具有重复键的记录。您是否忘记在主键上打开自动增量?
-
另外,您的脚本面临SQL Injection Attacks 的风险。使用prepared statements。即使escaping 字符串也不安全!
-
您的代码中只有一个插入语句。它进入了同性恋表。在该语句中,您没有插入 idfag。该列是否有在主键中输入值的序列?
-
谢谢,我想通了。但是现在我遇到了另一个问题:未捕获的异常'mysqli_sql_exception'带有消息'无法添加或更新子行:外键约束失败(
karakterer.fag,约束FK_fag_studieret外键(idStudieretning)参考@ 987654332@ (idstudieretning) ON DELETE NO ACTION ON UPDATE NO ACTION)' 在 C:\wamp\www\oveove.php 第 159 行
标签: php mysql database mysql-workbench