Я в ситуации, когда мне нужно вставить в 2 таблицы в запросе. Я искал в Интернете и не нашел решения. То, что я хочу сделать, – вставить значения в таблицу user
и вставить значения в profile
одновременно. Я мог бы сделать одно за другим , но я читал, что он неэффективен и считается плохой техникой кодирования.
Текущий код:
$statement = $db->prepare(" BEGIN; INSERT INTO `user`(`username`, `email`, `password_hashed`, `fname`, `lname`, `dob`, `agreement`, `gender`, `access_token`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); INSERT INTO `profile_picture`(`owner`) VALUES (LAST_INSERT_ID()); COMMIT; "); if($statement) { $statement->bind_param("ssssssiss", $username, $email, $hashedPassword, $fname, $lname, $dob, $agreement, $gender, $access_token); $statement->execute(); $statement->close(); echo "DONE"; exit(); } else printf("Error: %s.\n", $db->error);
Попробуйте использовать mysqli_multi_query, посмотрите эту ссылку, например http://blog.ulf-wendel.de/2011/using-mysql-multiple-statements-with-php-mysqli/
Может быть, это может вам помочь: MySQL Вставить в несколько таблиц?
Я думаю, вам нужно заявление вроде этого:
BEGIN; INSERT INTO user(column_a,column_b) VALUES('value_a','value b'); INSERT INTO profile(column_x,column_y) VALUES('value_x','value_y'); COMMIT;
Если вам нужен последний идентификатор из таблицы пользователя, вы можете использовать функцию LAST_INSERT_ID ().
У меня были проблемы с этим, пытаясь скопировать ответы, такие как Фрэнк. Правильный способ сделать это:
<?php try { $db->beginTransaction(); $stmt = $db->prepare("QUERY"); $stmt->execute(); $stmt = $db->prepare("ANOTHER QUERY??"); $stmt->execute(); $db->commit(); } catch(PDOException $ex) { //Something went wrong rollback! $db->rollBack(); echo $ex->getMessage(); }
После выполнения первого оператора вы можете получить доступ к insertID из PHP, используя следующее: $ last_id = $ db-> lastInsertId ();
Надеюсь это поможет!