2016-12-07 58 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

相关问题