Intereting Posts
Сохранить как диалог, используя php / или html, чтобы сделать fwrite в пользовательском выборе bind_result в массив PHP mysqli подготовленный оператор Автоматический выход из системы php ajax с таймером ошибка yii при выполнении специальной команды DIV не отображает горизонтальную полосу прокрутки Не удается получить доступ к вспомогательной директории на сервере Родительские отношения ребенка PHP / MYSQL PHP. Получить домашний каталог пользователя (для виртуального хостинга) Как сделать совпадение символов в точках с использованием регулярных выражений Страница PHP показывает сырой код Как заменить файл robots.txt на .htaccess Yii Записывает таблицу, но не все выбранные данные извлекаются Как динамически строить запросы с помощью PDO Laravel: как регистрировать INFO для разделения файла Остановите скрипт (без фатальной ошибки) после определенного количества времени запроса / разбора

MySQLi: как вставить в несколько таблиц с подготовленными операторами

Я в ситуации, когда мне нужно вставить в 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 ();

Надеюсь это поможет!