我不确定我的外键是否正常工作

时间:2018-01-16 16:44:02

标签: php html sql database phpmyadmin

我建立了一个员工可以发送反馈的系统。

反馈表: enter image description here

现在我的数据库中有两个表,tbl_feedback和employee:

tbl_feedback: enter image description here

雇员: enter image description here

我的tbl_feedback中的employee_id是一个引用employee表中id的外键。

我的问题是,是否真的有必要在我的表单上放置员工ID才能运作?因为我注意到当我删除表单上的员工ID时,我收到错误。这是否也意味着我没有将employee_id列设置为外键?正常?

这是我的插入反馈php代码:

<?php
require_once ('database.php');

if (isset($_POST['send'])) {

$employee_id = $_POST['employee_id'];
$full_name = $_POST['full_name'];
$email = $_POST['email'];
$website = ($_POST['website']);
$message = ($_POST['message']);

{
$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$insert_query = "INSERT INTO tbl_feedback (employee_id, full_name, email, website, message)
VALUES (?, ?, ?, ?, ?)";

$insert = $database->prepare($insert_query);
$insert->execute(array($employee_id, $full_name, $email, $website, $message));

echo "<script>alert('Successfully sent!'); window.location='feedback.php'</script>";
}
}
?>

以下是我创建tbl_feedback的方法:

CREATE TABLE tbl_feedback (
  id int NOT NULL AUTO_INCREMENT,
  employee_id int NOT NULL,
  full_name varchar(100) NOT NULL,
  email varchar(100) NOT NULL,
  website varchar(100) NOT NULL,
  message varchar(100) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (employee_id) REFERENCES employee(id)
 );

2 个答案:

答案 0 :(得分:1)

如果您从反馈表单中删除employee信息,但未从其他来源获取信息,则您将明确遇到问题。

您添加到表中的外键约束只是确保您的表中没有反馈条目,没有相应的员工来映射它。

这意味着,它不会将两个表格相互神奇地映射,并确保每个反馈都有一个链接的员工,而是为每个无法链接到员工的反馈条目引发错误,基于给定id。因此,您遇到的错误实际上证明了您的外键约束正常工作。

所以尽管你有一个外键约束,你仍然需要在你的代码中管理映射。

答案 1 :(得分:0)

如果表中有外键,那么表需要在插入数据时传递密钥。如果您通过表单传递或通过PHP代码从数据库中获取您的员工ID,则无关紧要。