【问题标题】:My input will not insert information to my database/ Fatal Error我的输入不会将信息插入我的数据库/致命错误
【发布时间】: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


【解决方案1】:

您必须查看表fag,其中代码试图将一些数据插入到该表中,因为您可能已将一个字段定义为主键,但是当您执行插入语句时,您并没有插入该字段字段,如果该字段未设置为自动增量,则数据库使用默认值填充它,如果它是整数字段,则为 0。

【讨论】:

  • 这解决了我原来的问题,但发现了另一个.. 致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息'无法添加或更新子行:外键约束失败(karakterer.@987654323 @, CONSTRAINT FK_fag_studieret FOREIGN KEY (idStudieretning) REFERENCES studieret (idstudieretning) ON DELETE NO ACTION ON UPDATE NO ACTION)' 在 C:\wamp\www\oveove.php 第 159 行
  • 您是否对这句$sql="insert into fag (fagnavn, type, idlærer, idStudieretning) values ('$fag', '$type', '$lærer', '$studieret')"; 进行了回显,以查看表单发布时您传递的真正值是什么?
  • 这是因为列 idStudieretning 是来自表 studieret 的外键。这意味着在您的表中 studieret 必须存在一行 idstudieretning 列等于您的 idStudieretning 值,然后才能插入 fag
  • @nacho 这正是错误所在。我告诉他做一个回显,因为如果您查看他发布的代码,它会从先前加载了表 studieret 值的选择中获取值。这样他就可以确保SQL语句中加载的值是正确的。
  • @JonatanRuiz 它返回:插入 fag (fagnavn, type, idlærer, idStudieretning) 值('Mattematikk', 'Realfag', '3', '')
猜你喜欢
  • 2015-10-31
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多