il contenuto dei file PHP MySQL fuga problema
-
13-09-2019 - |
Domanda
Sto tentando di caricare un file .pdf in un database mysql con php.
E 'tutto bene, tranne per il contenuto del file. Non importa quanto mi sembra cercano di fuggire caratteri speciali, la query fallisce sempre, per lo più con "Unknown Command \ n".
addslashesho usato, mysql_real_escape_string, removeslashes etc.
Qualcuno ha qualche idea su come sfuggire il contenuto dei file?
Molte grazie,
Soluzione
Ho usato la seguente sequenza prima, che sembra funzionare bene, e memorizzerà tutti i dati nel db, comprese le immagini, PDF, matrici di dati, ecc ...:)
La memorizzazione dei dati (può essere una stringa, array, oggetto, ecc.);
In primo luogo, trasformare i dati in una stringa codificata base64
$strData = strtr(
base64_encode(
addslashes(
gzcompress( serialize($dataToStore) , 9)
)
) , '+/=', '-_,');
Poi memorizzare i dati dei stringa nel db ...
Recupero dati;
Estrarre i dati di stringa dal db
decodificare i dati di nuovo a ciò che si vuole (potrebbe essere necessario eseguire un passaggio aggiuntivo dopo questa seconda dei dati di input, matrice, immagini, ecc.)
$returnData = unserialize(
gzuncompress(
stripslashes(
base64_decode(
strtr($strDataFromDb, '-_,', '+/=')
)
)
)
);
Questo certamente mi ha aiutato a memorizzare quello che mi serviva per memorizzare in un db MySQL!
Altri suggerimenti
Non vedo il motivo per cui si vuole memorizzare un file in un database, ma vi consiglio di dare un'occhiata a istruzioni preparate .
Indovina: Si può essere verificato errori a causa della incompatibilità tra i set di caratteri. PDF è probabilmente un file binario quindi è necessario fare in modo che colonna db è configurato per gestire la cosa che.
Oltre al problema fuga si potrebbe incorrere in "pacchetto troppo grande" errori se la (MySQL) variabile di sistema max_allowed_packet è impostato su un "valore piccolo".
Utilizzando l'estensione mysqli, preparate le dichiarazioni e mysqli_stmt :: send_long_data è possibile evitare entrambi i problemi.