Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

di il
6 risposte

Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

Buongiorno a tutt*!

Non riesco a capire perché la query sottostante funzioni con PhpMyAdmin e dal client di MariaDB (mysql client) e non se eseguo da PHP.

Errore:
Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE '/var/www/html/domain.dom/tmp/qry_patients_11_11.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY " " FROM qry_patients ; - Error: in /var/www/html/domain.dom/export_csv.php on line 90

Linea 90 e le precedenti:
$tbl_name = "qry_patients"; // table name of the selected db
$FileName = "/var/www/html/domain.dom/tmp/".$tbl_name."_".date("h_i").".csv";
$query = "SELECT * INTO OUTFILE '".$FileName."' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY \"\n\" FROM ".$tbl_name." $result = mysqli_query($linkDB, $query) OR trigger_error("Query Failed! SQL: $query - Error: ".mysqli_error(), E_USER_ERROR);
Dopo 3 giorni di tentativi non so più cosa provare.

Lo so che si può fare la stessa cosa con fputcsv() ma vorrei capire il motivo di questo strano comportamento.

Ciao. Ilic

6 Risposte

  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    "SELECT * INTO OUTFILE '".$FileName."' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\n' FROM ".$tbl_name;
    Ho letto la sintassi sul Doc mysql il carattere new line è stringa non il valore rappresentabile, rimosso gli apici doppi e aggiunto il semicolonna.
  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    Il problema è che non funziona nemmeno se tolgo tutti gli elementi opzionali.
    $tbl_name = "qry_patients"; // table name of the selected db
    $FileName = "/var/www/html/domain.dom/tmp/".$tbl_name."_".date("h_i").".csv";
    $query = "SELECT * INTO OUTFILE '".$FileName."' FROM ".$tbl_name." $result = mysqli_query($linkDB, $query) OR trigger_error("Query Failed! SQL: $query - Error: ".mysqli_error(), E_USER_ERROR);
    
    Quindi non drovrebbe essere quella la ragione.

    Ciao. Ilic
  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    Da una ricerca online vedo che stai usando anche un where vuoto il che non è consentito teoricamente da mysql il che spiega anche il punto finale del tuo codice e gli apici doppi superflui..
    Per favore copia e incolla esattamente il mio codice e dimmi il risultato.
    Nel frattempo inserisci in cima anche
    error_reporting( -1 );
  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    Ehmmm, scusa ma mi sa che leggi male. Non c'è nessun WHERE di MySQL e comunque anche delle condizioni mi funziona da riga di comando ma non tramite PHP.

    Non credere che non abbia sotto controllo i log di Apache (con i log di Apache ho anche quelli di PHP) e che non abbia provato a dare un echo $query come prima soluzione.

    Ripeto: la query è corretta. In PhpMyAdmin e da riga di comando funziona. Credo sia un problema di permessi di PHP ma non ne sono certo,
    C'è nessuno che sia incappato nello stesso problema?

    Ad esempio, Homus, hai provato a vedere se a te funziona una qualsiasi query SELECT INTO OUTFILE sul tuo server in uno script PHP?

    Ciao. Ilic
  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    Ho capito!

    Stavo cercando di creare una situazione semplificata e ho capito!

    Non è un problema dell'utente del demone di MariaDB.
    Non è un problema dell'utente di Apache (tramite cui "gira" PHP).

    Rullo di tamburi....

    E' un problema di privilegi dell'utente di MySQL.

    Le mie prove da client e da phpMyAdmin le facevo con un utente con pieni privilegi.
    Invece da php usavo un utente con privilegi solo su uno specifico DB.

    Bon, ora rimane da capire quale privilegio va dato all'utente per poter utilizzare OUTFILE.

    Qualcuno lo sa?
  • Re: Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE [risolto]

    GRANT FILE

    Con GRANT FILE sull'utente MySQL sunziona tutto a dovere.

    Va beh, un bel buco di sicurezza. Curiosità soddisfatta.
Devi accedere o registrarti per scrivere nel forum
6 risposte