Можно ли использовать LAST_INSERT_ID () в цикле php for? - PullRequest
0 голосов
/ 25 апреля 2018

Возможно использовать LAST_INSERT_ID() в php for-loop. Мне нужно получить последний playground PK как 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);

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вам нужно получить последний вставленный идентификатор, используя 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, чтобы предотвратить это.

0 голосов
/ 25 апреля 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...