>

테이블에서 여러 값을 선택하려고합니다 .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());
}
}

하지만 이해할 수없는 오류가 있습니다

와이즈 비즈

phpmyadmin에서 코드를 시도하고 작동합니다

이걸 사용하면

Error No: 1064 - MySQL error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TEMPORARY TABLE temp_table LIKE playlist_generate; SELECT data_playlist, ' at line 2

결과가 없습니다

$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

    문서에서-

    와이즈 비즈

    또한 한 번에 여러 개의 쿼리를 실행하려고하는 것 같습니다. MySQLi를 사용하는 경우

    You cannot use CREATE TEMPORY TABLE ... LIKE to create an empty table based on the definition of a table that resides in the mysql tablespace, InnoDB system tablespace (innodb_system), or a general tablespace. The tablespace definition for such a table includes a TABLESPACE attribute that defines the tablespace where the table resides, and the aforementioned tablespaces do not support temporary tables.

    를 사용하고 싶을 것입니다 . multi_query() 사용 , 특히이상적이지 않은과 같은 상황에서이 기능을 사용하려는 경우 논리를 신중하게 고려하십시오.

  • 답변 # 2

    모두 감사합니다. 가장 좋은 방법은 더 많은 쿼리를 만드는 것입니다. 감사합니다

    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 ""; }

관련 자료

  • 이전 Active Directory 도메인 서비스에 REST API를 사용할 수 있습니까?
  • 다음 command line interface - Jenkins CLI에서 작업 추가