外键未填充MySQL

时间:2013-03-17 12:54:29

标签: php mysql foreign-key-relationship

使用mysql在子表中不填充外键。所有编程和sql的新手总数。创建Web站点表单以使用PHP / MYSQL填充人员数据,然后启动辅助Web站点表单以填充汽车维护数据。问题是父表中的外键没有更新子表。非常感谢任何帮助。

父表:

$sql = "CREATE TABLE persons 
(
Firstname CHAR(15),
Lastname CHAR(15),
Age INT,
PRIMARY KEY(Firstname)
)";

子表:

$sql = "CREATE TABLE cardata
(
CID INT NOT NULL AUTO_INCREMENT, 
Firstname CHAR(15) NOT NULL,  
Manufacturer CHAR(25),
Model CHAR(15),
Year INT,
`Oil Miles` INT,
`Oil Date` DATE,
`Rotation Miles` INT,
`Rotation Date` DATE,
PRIMARY KEY(CID),
FOREIGN KEY (Firstname) REFERENCES persons (Firstname)
ON  UPDATE CASCADE ON DELETE CASCADE
)";

父表插入:

$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";

子表插入:

$sql="INSERT INTO cardata (Firstname,Manufacturer)
VALUES
('LAST_INSERT_ID()','$_POST[manufacturer]')";

1 个答案:

答案 0 :(得分:0)

这是因为你要插入一个字符串。 LAST_INSERT_ID()不应该用单引号换行,因为这使得它成为字符串文字。删除单引号,它肯定会有效。

$sql="INSERT INTO cardata (Firstname,Manufacturer)
VALUES (LAST_INSERT_ID(),'$_POST[manufacturer]')";

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。