2013-03-17 55 views
0

未使用mysql填充子表中的外鍵。在所有的東西編程和sql的總新手。使用PHP/MYSQL創建Web站點表單來填充人員數據,然後啓動輔助Web站點表單來填充汽車維護數據。問題是來自父表的外鍵沒有更新子表。任何幫助深表感謝。外鍵未填充MySQL

父表:

$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]')"; 
+0

@JW。 :添加無用標籤(如您已添加到所回答的所有問題中的「[query]」標籤)有什麼意義? – 2013-03-17 13:03:58

回答

0

這是因爲你插入了一個字符串。 LAST_INSERT_ID()不應該用單引號包裝,因爲這使得它字符串文字。刪除單引號,它肯定會工作。

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

作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。