Как правильно делать апдейт временных таблиц в цикле foreach?

Обхожу в цикле простой массив, в процессе хочу создавать временные таблицы по id, чтобы брать из них дополнительные данные, затем апдейтить и вставлять в БД.

Но цикл срабатывает один раз. Что я делаю не так?

foreach ($array as $key => $value) {
      
        $id = $key;
        $text = $value;
        
        $query = "SET @last_id = LAST_INSERT_ID(); ";
        $query .= "CREATE TEMPORARY TABLE foo AS SELECT * FROM texts WHERE id = $id; ";
        $query .= "UPDATE foo SET id = @last_id, html_text = '$text'; ";
        $query .= "INSERT INTO texts SELECT * FROM foo; ";
        $query .= "DROP TABLE foo; ";
        mysqli_multi_query($link, $query); 

    } 
    mysqli_close($link);
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Это какой-то ужас, а не код. Здесь всё неправильно.

Не нужно никаких временных таблиц, не нужно multi_query (эта функция вообще никогда не нужна). Запросы надо исполнять с помощью подготовленных выражений.

Запрос нужен всего один.
$sql = "INSERT INTO texts SELECT null, page_id, ballon_no, text_lang, font_size, html_left, 
        html_top, html_width, html_height, ?, rotate, text_align, aspect_ratio,
        position_ratio, calc_width, calc_left, font_color, line_height, font_type 
        FROM texts WHERE id=?";
$stmt = $link->prepare($sql);
$stmt->bind_param("ss", $text, $id);
foreach ($array as $id => $text) {
    $stmt->execute();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы