[英]Error SQL create temp table with php
我嘗試從一個表中選擇多個值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);
我沒有結果
從文檔 -
您不能使用CREATE TEMPORY TABLE ... LIKE來基於位於mysql表空間 ,InnoDB系統表空間(innodb_system)或常規表空間中的表的定義創建空表 。 此類表的表空間定義包括TABLESPACE屬性,該屬性定義了表所在的表空間,並且上述表空間不支持臨時表。
此外,您似乎正在嘗試一次運行多個查詢。 如果您使用MySQLi,則需要使用multi_query()
。 使用multi_query()
,尤其是在這種情況下並不理想,因此,如果發現自己想要使用此函數,請仔細考慮您的邏輯。
謝謝大家。 因此,執行此操作的最佳方法是進行更多查詢。 謝謝
// 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 "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.