我建立了一个员工可以发送反馈的系统。
现在我的数据库中有两个表,tbl_feedback和employee:
我的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)
);
答案 0 :(得分:1)
如果您从反馈表单中删除employee
信息,但未从其他来源获取信息,则您将明确遇到问题。
您添加到表中的外键约束只是确保您的表中没有反馈条目,没有相应的员工来映射它。
这意味着,它不会将两个表格相互神奇地映射,并确保每个反馈都有一个链接的员工,而是为每个无法链接到员工的反馈条目引发错误,基于给定id
。因此,您遇到的错误实际上证明了您的外键约束正常工作。
所以尽管你有一个外键约束,你仍然需要在你的代码中管理映射。
答案 1 :(得分:0)
如果表中有外键,那么表需要在插入数据时传递密钥。如果您通过表单传递或通过PHP代码从数据库中获取您的员工ID,则无关紧要。