使用php lastInsertId()将一个主键从一个表作为外键插入到另一个表中

时间:2016-12-07 14:14:19

标签: php mysql database

我是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的值时,它显示正确。

代码有什么问题?如何更正是为了正确插入外键?

1 个答案:

答案 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
  ]);
}