Вставить значения с отношением внешнего ключа в две разные таблицы одновременно? (Баз данных)

Итак, у меня есть 2 таблицы:

  • users с колоннами id (основной, auto_increment), username, password, person_id (иностранный ключ)
  • люди с колоннами id (основной, auto_increment), first_name, last_name

Я пытаюсь при регистрации новой учетной записи вставить новую строку в people а затем вставьте новую строку в users с people.id как внешний ключ users.person_id,

Прямо сейчас у меня есть 2 функции php, которые выполняются сразу после друг друга, во-первых, одна с этим запросом:

вставить в людей (имя, фамилия) значения (: имя,
:Фамилия)

Во-вторых, один с этим запросом:

вставить в user (username, password, person_id) значения (: user,
: pass, LAST_INSERT_ID ())

Все это прекрасно работает за исключением того, что last_insert_id() продолжает придавать значение 0 вместо идентификатора из предыдущего запроса. Может быть, это не возможно использовать last_insert_id() при использовании 2 отдельных запросов? Если так, то каков будет лучший путь?

Это мой соответствующий код PHP:

//make new person
$newPerson = new PeopleManagement();
$pm = $newPerson->createNewPerson($_POST["firstName"], $_POST["lastName"]);

//make new user
$newUsr = new Authentication();
$ac = $newUsr->registerNewUser($_POST["user"], $_POST["pass"]);public function registerNewUser ($user, $pass) {
try {

$dbm = new PDO(DBCONFIG::$db_conn, DBCONFIG::$db_user, DBCONFIG::$db_pass);
$dbm->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbm->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

hash = password_hash($pass, PASSWORD_DEFAULT);

$sql = "insert into users (username, password, person_id) values (:user, :pass, LAST_INSERT_ID())";

$stmt = $dbm->prepare($sql);
$stmt->execute(array(
':user' => $user,
':pass' => $hash
));

$dbm = null;

} catch(PDOException $ex) {
return "Could not connect to database";
}
}

public function createNewPerson($firstName, $lastName) {

$dbm = new PDO($this->dbConn, $this->dbUser, $this->dbPass);

$sql = "insert into people (first_name, last_name) values (:firstname, :lastname)";

$stmt = $dbm->prepare($sql);
$stmt->execute(array(
':firstname' => $firstName,
':lastname' => $lastName
));

$dbm = null;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]