我是PHP和MySQL的新手,所以我需要一些帮助来纠正我的代码。
我有两张桌子 - 人和成绩 第一个表包含列 id (自动增量),名称,姓氏。 第二个列有 id (自动增量), personId ,等级。 PersonId持有一个外键,它是人员表中作为id的主键。
我使用表单将数据插入表中,然后使用php代码处理数据并将其插入到我的表中:
$firstName = $_POST['firstName'];
$lastName = $_POST['lastName'];
$grade = $_POST['grade'];
if ($firstName) {
$insertPersonSQL = <<<EOT
INSERT INTO person (firstName, lastName)
VALUES (:firstName, :lastName);
INSERT INTO grade (grade)
VALUES (:grade);
EOT;
$insertPersonStatement = $db->prepare($insertPersonSQL);
$insertPersonStatement->execute([
':firstName' => $firstName,
':lastName' => $lastName,
':grade' => $grade,
]);
}
然后我尝试使用lastInsert()从person中插入id作为person_id进行评分以获取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 :(得分:0)
为什么在没有grade
的情况下添加personId
?最好不要在这样的查询中做到这一点:
// 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
]);
}