Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误SQL使用php创建临时表_Php_Mysql_Sql - Fatal编程技术网

错误SQL使用php创建临时表

错误SQL使用php创建临时表,php,mysql,sql,Php,Mysql,Sql,我尝试从一个表中选择多个值,生成播放列表,根据条件创建临时表,更新字段,然后插入到我的表中 $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

我尝试从一个表中选择多个值,生成播放列表,根据条件创建临时表,更新字段,然后插入到我的表中

$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());
}
}
我没有从以下方面得到任何结果

不能使用“创建临时表…”。。。希望根据mysql表空间、InnoDB系统表空间(InnoDB_system)或常规表空间中的表定义创建空表。此类表的表空间定义包括一个表空间属性,该属性定义了表所在的表空间,并且前面提到的表空间不支持临时表

此外,您似乎试图同时运行多个查询。如果您正在使用MySQLi,您将希望使用。使用<代码>多个查询(<)>代码>,特别是在这样的情况下并不理想,所以如果你想自己使用这个函数,请仔细考虑你的逻辑。 所以最好的方法是进行更多的查询。 谢谢


您只能使用
->query()
运行一个查询您正在尝试运行6为什么要在
If error
测试中编写try/catch块。为什么不直接输出错误呢mesage@RiggsFolly所以我必须使用->multi_query()?这是可能的,但我会检查@JayBlanchard answer。我个人会使用
->query()
在6个单独的查询中完成这项工作,因为处理多个查询的结果可能会有点痛苦,我问你为什么需要它?早上好。我不知道:)早上真愚蠢。我在一个非常令人沮丧的深夜意外地发现了这一点,就像我处理所有编程问题一样:)嗨,所以我必须使用createtemporarytabletemp_tableengine=MEMORY;是,创建空白表。您可以执行
SELECT
类似
create TEMPORARY table new\u tbl SELECT*FROM orig\u tbl LIMIT 0
IMHO,推荐
multi\u query()
是个坏主意。据我所知,它使事情变得更加复杂,但却没有什么好处。
$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);
// 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 "";
}