2016-12-07 54 views
0

我是一個PHP和MySQL的新手,所以我需要一些幫助來糾正我的代碼。從一個表插入一個主鍵作爲外鍵到另一個表用PHP lastInsertId()

我有兩個表 - 等級 第一個表中的列ID(自動遞增),。 第二列有id(自動增量),personId,等級PersonId擁有一個外鍵,它是人表中的主鍵。

我插入的數據與窗體中的表,然後讓PHP代碼來處理數據,並將其插入到我的表:

​​

然後我嘗試從人插入一個ID等級爲爲person_id使用lastInsert()來獲取ID:

$insertIdSQL = <<<EOT 
INSERT INTO grade (personId) 
VALUES (:personId); 
EOT; 
$insertIDStatement = $db -> prepare($insertIdSQL); 
$lastId = $db->lastInsertId(); 
$insertIDStatement -> execute([ 
    ':personId' => $lastId, 
]); 

然而,當我嘗試填寫表格等級爲person_id得到0值的形式,列的其餘均爲正常。 當我調試並回顯$ lastId的值時,它顯示正確。

代碼有什麼問題?如何糾正是爲了正確插入外鍵?

+0

我的第一個想法是你的問題是外鍵列person_id是不是與主鍵相同的類型。請你可以粘貼你的數據庫表列? – Greg

+0

都是int(11),我仔細檢查過 – lessismore

+0

你有兩個列(personId'和'grade)的默認值嗎? – Marcus

回答

0

爲何在沒有personId的情況下添加grade?是不是更好做一個這樣的查詢這樣做:

// Get params 
$firstName = $_POST['firstName']; 
$lastName = $_POST['lastName']; 
$grade = $_POST['grade']; 

if ($firstName) { 
    // insert person 
    $insertPersonSQL = <<<EOT 
    INSERT INTO person (firstName, lastName) 
    VALUES (:firstName, :lastName); 
    EOT; 

    $insertPersonStatement = $db->prepare($insertPersonSQL); 
    $insertPersonStatement->execute([ 
    ':firstName' => $firstName, 
    ':lastName' => $lastName 
    ]); 

    // insert grade 
    $insertIdSQL = <<<EOT 
    INSERT INTO grade (grade, person_id) 
    VALUES (:grade, :person_id); 
    EOT; 
    $insertIDStatement = $db -> prepare($insertIdSQL); 
    $lastId = $db->lastInsertId(); 
    $insertIDStatement -> execute([ 
    ':grade' => $grade, 
    ':person_id' => $lastId 
    ]); 
} 
+0

完美無缺!非常感謝! – lessismore

+0

你注意到你「錯誤」還是你需要幫助? – Marcus

+0

我只是簡單地更正了我的代碼,以便我按照您的建議一次將所有數據插入到第二個表中(包括grade和personId)。並更正拼寫的差異,person_id到personId。 – lessismore

相關問題