Как вставить lastInsertId, используя foreach l oop в PHP и MySQL? - PullRequest
2 голосов
/ 09 марта 2020

Добрый день,

У меня есть этот foreach l oop, одно значение переменной (p_id) было присвоено lastInsertId () предыдущей вставки из другой таблицы. Допустим, у меня есть две таблицы, table_a для списка людей и table_b для списка книг, которыми они владеют.

p_id – is the id of the person from table_a
b_title – is the title of the book
b_genre is the genre of the book

Допустим, я добавил нового человека в table_a, его зовут Джерри и его ID или p_id - 333. Так как Джерри является последним человеком, включенным в список, его p_id, равный 333, теперь является lastInsertId (). Затем, скажем, Джерри принадлежит две книги, которые я сейчас запишу в table_b, который является списком книг, принадлежащих человеку.

Вот код того, как я буду вставлять название и жанр книги с помощью динамического c поля ввода / удаления.

$query_1 = “some_mysql_code_that_will_insert_data_to_table_a”;

       $stmt_1 = $this->conn->prepare($query_1);

if($stmt_1->execute()){
//run this code under
              foreach($p_name AS $key => $value) {

                  $query_2 = "INSERT INTO

                    table_b

                    SET
                    p_id=:p_id,
                    b_title = :b_title,
                    b_genre = :b_genre";


                    $stmt _2= $this->conn->prepare($query);


                    $p_id=$this->conn->lastInsertId();
                    $b_title=$value;
                    $b_genre = $b_genre[$key];


                    $stm_2->bindParam(':p_id', $p_id);
                    $stm_2t->bindParam(':b_title', $b_title);
                    $stmr_2->bindParam(':b_genre', $b_genre);

                   $stmt_2->execute();
                  }
}

проблема в том, что я могу только вставьте lastInsertId () один раз, идентификатор 333 в столбец p_id.

Чтобы помочь вам визуализировать, вот пример table_b.

+--------+---------+---------+---------+
| b_id   | p_id    | b_title | b_genre |
+--------+---------+---------+---------+
| 1      | 333     | Carrie  | Horror  |

Теперь проблема заключается в том, когда я вставляю вторые данные или вторая книга, которой владеет Джерри.

Вот что происходит.

+--------+---------+---------+---------+
| b_id   | p_id    | b_title | b_genre |
+--------+---------+---------+---------+
| 1      | 333     | Carrie  | Horror  |
+--------+---------+---------+---------+
| 2      | 1       | Dune    | Scifi   |

Как мне сделать приведенную выше таблицу, выглядеть так, с тем же p_id.

+--------+---------+---------+---------+
| b_id   | p_id    | b_title | b_genre |
+--------+---------+---------+---------+
| 1      | 333     | Carrie  | Horror  |
+--------+---------+---------+---------+
| 2      | 333     | Dune    | Scifi   |

Спасибо.

1 Ответ

2 голосов
/ 09 марта 2020

Вам необходимо сначала сохранить / сохранить идентификатор Джерри, прежде чем снова вызывать последний идентификатор.

Так что не включайте этот ->lastInsertId() в блок foreach. Сохраните идентификатор, затем повторно используйте его внутри l oop.

$query_1 = "some_mysql_code_that_will_insert_data_to_table_a";

$stmt_1 = $this->conn->prepare($query_1);

if ($stmt_1->execute()) {
    // run this code under

    $p_id = $this->conn->lastInsertId(); // save Jerry's ID here first

    $query_2 = "
    INSERT INTO table_b
    SET
        p_id=:p_id,
        b_title = :b_title,
        b_genre = :b_genre
    ";


    $stmt_2 = $this->conn->prepare($query);

    foreach($p_name AS $key => $value) {

        $b_title = $value;
        $b_genre = $b_genre[$key];


        $stmt_2->bindParam(':p_id', $p_id);
        $stmt_2->bindParam(':b_title', $b_title);
        $stmr_2->bindParam(':b_genre', $b_genre);

        $stmt_2->execute();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...