我创建了一个由三个表组成的数据库。这是我用外键创建表的查询。
CREATE TABLE reporter
(
reporterid INT NOT NULL AUTO_INCREMENT,
firstname VARCHAR(1000) NOT NULL,
lastname VARCHAR(100) NOT NULL,
PRIMARY KEY (reporterid)
);
CREATE TABLE flood
(
floodid INT NOT NULL AUTO_INCREMENT,
address VARCHAR(500) NOT NULL,
description VARCHAR(1000) NOT NULL,
dateofflood DATE NOT NULL,
timeofflood INT NOT NULL,
PRIMARY KEY (floodid)
);
CREATE TABLE reports
(
reportid INT NOT NULL AUTO_INCREMENT,
timereport NODATATYPE NOT NULL,
datereport DATE NOT NULL,
rid INT NOT NULL,
fid INT NOT NULL,
PRIMARY KEY (reportid),
FOREIGN KEY (rid) REFERENCES reporter(reporterid),
FOREIGN KEY (fid) REFERENCES flood(floodid)
);
我创建了一个系统,以便我通过PHP在我的数据库中添加记录/行。这是我的代码:
<?php
mysql_connect("localhost", "root", "") or die("Connection Failed");
mysql_select_db("flooddatabase")or die("Connection Failed");
$description = $_POST['description'];
$address = $_POST['address']; // Make sure to clean the
$dateofflood=$_POST['dateofflood'];
$timeofflood=$_POST['timeofflood'];
$firstname=$_POST['firstname'];
$lastname=$_POST['lastname'];
$dateofreport=$_POST['dateofreport'];
$ timeofreport = $ _ POST [ 'timeofreport'];
$query = "INSERT into flood(address,description,dateofflood,timeofflood) values ('$address','$description','$dateofflood','$timeofflood')";
$query2 = "INSERT into reporter(firstname,lastname) values ('$firstname','$lastname')";
$query3 = "INSERT into reports(dateofreport,timeofreport) values ('$dateofreport','$timeofreport')";
if(mysql_query($query))
if(mysql_query($query2))
if(mysql_query($query3))
{
echo "";
} else
{
echo "fail";
}
?>
我得到的结果很好。就是这样,在我的REPORTS表中,没有生成的外键。例如,我在记者表和泛洪表上输入了一些内容,外键'rid'和'fid'没有引用这两个表的值。需要帮助,谢谢。
答案 0 :(得分:0)
现在制作如下所示的最后一个插入语句:
"INSERT into reports(dateofreport,timeofreport,rid,fid) values ('$dateofreport','$timeofreport',$r_id,$f_id)";
我没有给你直接复制粘贴解决方案。
如果您需要知道如何通过执行插入查询来获取最后插入的ID,请查看此link
答案 1 :(得分:0)
没有正在生成的外键
我不完全确定你的意思是什么。 外来键不会生成&#34;。您可以使用主要键:
reporterid INT NOT NULL AUTO_INCREMENT
(以及其他两张表)
外键&#39; rid&#39;和&#39; fid&#39;没有价值
好吧,看看你的问题:
INSERT into reports(dateofreport,timeofreport) values ...
您在哪里插入rid
和fid
的值?我真的很惊讶这个查询 at ,因为这些列不允许NULL
值:
rid INT NOT NULL,
fid INT NOT NULL,
(虽然您的专栏名称也不排成一列,但我发现您显示的代码可能并非实际上您所使用的代码然而,除了这一点之外,事实仍然是,如果你想在这些字段中输入一个值,那么你必须在这些字段中输入值:
INSERT into reports(dateofreport,timeofreport,rid,fid) values ...
每次查询后,您都可以从mysql_insert_id()
获取最后生成的标识符:
$last_id = mysql_insert_id();
使用它来填充在后续查询中作为外键插入的值。
另外值得注意的是,mysql_*
库早已弃用,已被mysqli_
和其他库(如PDO
)取代。我强烈建议您升级到当前的技术,因为任何供应商都不支持您使用的技术。
此外,非常重要,您的代码对 SQL注入攻击 开放。这基本上意味着您执行用户发送给您的任何代码。您应该将用户输入视为值,而不是可执行代码。 This是开始阅读此主题的好地方,this也是如此。