Возможно использование 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);
Почему бы вам не попробовать это и не посмотреть, что произойдет?
сделать вот так: - $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) } }
Пусть это вам пригодится stackoverflow.com/a/13849004/2893413
@AlivetoDie - Опубликуйте как ответ ...
К вашему сведению, строки 4 и 5 можно гораздо проще записать как foreach ($ levelarray как $ level) {
Использование подготовленных операторов и переменных связывания сделает ваш код более безопасным, и вы можете подготовить вставку один раз и выполнить ее с отдельными значениями.






Нет, это не сработает. Первый страж получит идентификатор игровой площадки, а следующие два получат идентификатор предыдущего опекуна.
Вместо этого используйте mysqli_insert_id(), чтобы получить идентификатор и сохранить его как переменную вне цикла for.
да вы правы, перепутал id при вставке трех строк.
Вам нужно получить последний вставленный идентификатор, используя 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, чтобы предотвратить это.
Это = или .=
это =. запрос выполняется внутри цикла
@TheHive рад вам помочь :) :)
Привет! Можно ли использовать его из базы данных, например $_POST['levels]
@TommyBs извините за опечатку, когда я вошел сюда, я пропустил это, но имя столбца кода было в порядке.