Можно ли использовать LAST_INSERT_ID () в php for-loop?

Возможно использование LAST_INSERT_ID() в цикле php for-loop. Мне нужно получить последний ПК playground как FK в таблице guardian. Оба должны быть вставлены одновременно. Простите меня за то, что я не использую PDO, я просто хочу, чтобы эта штука сначала заработала.

$query = "INSERT INTO playground (parent, children, amount) VALUES ('John','susy','2000');";

$levelarray = array ("One", "Two", "Three");
for ($i = 0; $i < count($levelarray); $i++) {
    $level = $levelarray[$i];
    $query .= "INSERT INTO guardian (playgroundid, level) VALUES (LAST_INSERT_ID(),'$level');";
}
mysqli_multi_query($con, $query);

Я тоже пробовал это. Но приведенный ниже выводит последний идентификатор, но не вновь вставленный идентификатор.

$query = "INSERT INTO playground (parent, children, amount) VALUES ('John','Susy','2000');";

$sql = "SELECT playground_id AS playgroundid FROM playground ORDER BY playground_id DESC LIMIT 1";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);
$playId = $row['playgroundid'];

$levelarray = array ("One", "Two", "Three");
for ($i = 0; $i < count($levelarray); $i++) {
    $level = $levelarray[$i];
    $query .= "INSERT INTO guardian (playgroundid, level) VALUES ('$playId','$level');";
}
mysqli_multi_query($con, $query);

@TommyBs извините за опечатку, когда я вошел сюда, я пропустил это, но имя столбца кода было в порядке.

Dexter 25.04.2018 13:15

Почему бы вам не попробовать это и не посмотреть, что произойдет?

Nico Haase 25.04.2018 13:15

сделать вот так: - $query = "INSERT INTO playground (parent, children, amount) VALUES ('John','susy','2000');"; if (mysqli_query($con,$query)){ $id = mysqli_insert_id($con); $levelarray = array ("One", "Two", "Three"); for ($i = 0; $i < count($levelarray); $i++) { $level = $levelarray[$i]; $query = "INSERT INTO guardian (playgroundid, level) VALUES (LAST_INSERT_ID(),'$level');"; mysqli_query($con,$query) } }

WM-SH-PD-TV-FC 25.04.2018 13:16

Пусть это вам пригодится stackoverflow.com/a/13849004/2893413

Sadikhasan 25.04.2018 13:17

@AlivetoDie - Опубликуйте как ответ ...

Magnus Eriksson 25.04.2018 13:17

К вашему сведению, строки 4 и 5 можно гораздо проще записать как foreach ($ levelarray как $ level) {

Cuagau 25.04.2018 13:17

Использование подготовленных операторов и переменных связывания сделает ваш код более безопасным, и вы можете подготовить вставку один раз и выполнить ее с отдельными значениями.

Nigel Ren 25.04.2018 13:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
7
716
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Нет, это не сработает. Первый страж получит идентификатор игровой площадки, а следующие два получат идентификатор предыдущего опекуна.

Вместо этого используйте mysqli_insert_id(), чтобы получить идентификатор и сохранить его как переменную вне цикла for.

да вы правы, перепутал id при вставке трех строк.

Dexter 25.04.2018 13:16
Ответ принят как подходящий

Вам нужно получить последний вставленный идентификатор, используя mysqli_insert_id ()

А затем используйте его для следующего запроса, как показано ниже: -

$query = "INSERT INTO playground (parent, children, amount) VALUES ('John','susy','2000');"; 

if (mysqli_query($con,$query)){ 
    $id = mysqli_insert_id($con);  //get last inserted id
    $levelarray = array ("One", "Two", "Three"); 
    for ($i = 0; $i < count($levelarray); $i++) { 
        $level = $levelarray[$i]; 
        $query = "INSERT INTO guardian (playgroundid, level) VALUES ($id,'$level');"; 
        mysqli_query($con,$query) ;
    } 
}

Или вы все еще можете использовать mysqli_multi_query(), как показано ниже: -

$query = "INSERT INTO playground (parent, children, amount) VALUES ('John','susy','2000');"; 

if (mysqli_query($con,$query)){ 
    $id = mysqli_insert_id($con);  //get last inserted id
    $query1 = '';
    $levelarray = array ("One", "Two", "Three"); 
    for ($i = 0; $i < count($levelarray); $i++) { 
        $level = $levelarray[$i]; 
        $query1 .= "INSERT INTO guardian (playgroundid, level) VALUES ($id,'$level');"; 
    } 
     mysqli_multi_query($con, $query1);
}

Примечание: - Ваш запрос широко открыт для SQL INJECTION. поэтому попробуйте использовать prepared statement, чтобы предотвратить это.

Это = или .=

Dexter 25.04.2018 13:26

это =. запрос выполняется внутри цикла

WM-SH-PD-TV-FC 25.04.2018 13:26

@TheHive рад вам помочь :) :)

WM-SH-PD-TV-FC 25.04.2018 13:48

Привет! Можно ли использовать его из базы данных, например $_POST['levels]

Dexter 25.04.2018 16:01

Другие вопросы по теме