Ошибка SQL создать временную таблицу с php

0

Я пытаюсь выбрать несколько значений из таблицы, playlist_generate, с условием, создать временную таблицу, обновить поле и вставить в мою таблицу

$data_tabella_duplicata = $_POST['data_duplicata'];
$data_iniziale_originale = $_GET['data_iniziale'];

$query_duplica_playlist = "
DROP TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table LIKE playlist_generate;
SELECT data_playlist, giorno_playlist, orario_playlist, nome_evento,nome_programma FROM playlist_generate WHERE data_playlist = '".$data_iniziale_originale."';
UPDATE temp_table SET data_playlist='".$data_tabella_duplicata."';
INSERT INTO playlist_generate SELECT null,data_playlist, giorno_playlist,orario_playlist, nome_evento, nome_programma FROM temp_table;
DROP TABLE temp_table;
";

$esegui_query_duplica_playlist = $connessione->query($query_duplica_playlist);
if ($connessione->error) {
try {
    throw new Exception("MySQL error $connessione->error <br> Query:<br> $query_duplica_playlist", $connessione->errno);
} catch (Exception $e) {
    echo "Error No: ".$e->getCode()." - ".$e->getMessage()."<br >";
    echo nl2br($e->getTraceAsString());
}
}

но у меня ошибка, я не понимаю

Ошибка №: 1064 - Ошибка MySQL У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'CREATE TEMPORARY TABLE temp_table LIKE playlist_generate; SELECT data_playlist, 'в строке 2

Я пробую код в phpmyadmin, и он работает

если я использую это

$query_duplica_playlist = "
DROP TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table ENGINE = MEMORY;
SELECT data_playlist, giorno_playlist, orario_playlist, nome_evento,nome_programma FROM playlist_generate WHERE data_playlist = '".$data_iniziale_originale."';
UPDATE temp_table SET data_playlist='".$data_tabella_duplicata."';
INSERT INTO playlist_generate SELECT null,data_playlist, giorno_playlist,orario_playlist, nome_evento, nome_programma FROM temp_table;
DROP TABLE temp_table;
";

$esegui_query_duplica_playlist = $connessione->multi_query($query_duplica_playlist);

У меня нет результата

  • 0
    Вы можете запустить только ОДИН запрос, используя ->query() вы пытаетесь запустить 6
  • 0
    Почему вы кодируете блок try / catch внутри теста If error . Почему бы просто не вывести сообщение об ошибке
Показать ещё 4 комментария
Теги:

2 ответа

3

Из документов -

Вы не можете использовать CREATE TEMPORY TABLE... LIKE для создания пустой таблицы на основе определения таблицы, которая находится в табличном пространстве mysql, системном табличном пространстве InnoDB (innodb_system) или общем табличном пространстве. Определение табличного пространства для такой таблицы включает атрибут TABLESPACE, который определяет табличное пространство, в котором находится таблица, и вышеупомянутые табличные пространства не поддерживают временные таблицы.

Кроме того, вы пытаетесь одновременно запустить несколько запросов. Если вы используете MySQLi, вы захотите использовать multi_query(). Использование multi_query(), особенно в ситуации, такой как это не идеально, так что тщательно рассмотрите свою логику, если вы захотите использовать эту функцию.

  • 1
    Доброе утро, Джей. Я не знал, что :)
  • 1
    Доброе утро @RiggsFolly. Я узнал об этом совершенно случайно одной поздней и очень расстраивающей ночью, как и все мои проблемы с программированием :)
Показать ещё 13 комментариев
0

Спасибо всем. Таким образом, лучший способ сделать это - сделать больше запросов. Спасибо

// 1 query
$query_seleziona_data_controllo        = "SELECT data_generata FROM data_generata WHERE data_generata ='".$data_tabella_duplicata."' ";
$esegui_query_seleziona_data_controllo = $connessione->query($query_seleziona_data_controllo);

$numero_righe_query_controllo = $esegui_query_seleziona_data_controllo->num_rows;
if ($numero_righe_query_controllo == 0) {

// 2 query
$query_duplica_playlist = "INSERT INTO playlist_generate_temp
SELECT null,data_playlist, giorno_playlist, orario_playlist, nome_evento,nome_programma FROM playlist_generate
WHERE data_playlist = '".$data_iniziale_originale."' ";

$esegui_query_duplica_playlist = $connessione->query($query_duplica_playlist);

// 3 query
$query_update_data_nuova = "UPDATE playlist_generate_temp SET data_playlist='".$data_tabella_duplicata."' WHERE data_playlist = '".$data_iniziale_originale."' ";

$esegui_query_update_data_nuova = $connessione->query($query_update_data_nuova);

// 4 query
$query_inserisci_duplicato = "INSERT INTO playlist_generate
SELECT null,data_playlist, giorno_playlist, orario_playlist, nome_evento,nome_programma FROM playlist_generate_temp
WHERE data_playlist = '".$data_tabella_duplicata."' ";

$esegui_query_inserisci_duplicato = $connessione->query($query_inserisci_duplicato);

// 5 query
$query_truncate_temp = "TRUNCATE TABLE playlist_generate_temp";

$esegui_query_truncate_temp = $connessione->query($query_truncate_temp);

mysqli_close($connessione);

} else {

echo "";
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню