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".

addslashes

ho usato, mysql_real_escape_string, removeslashes etc.

Qualcuno ha qualche idea su come sfuggire il contenuto dei file?

Molte grazie,

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top