Pregunta

Estoy intentando cargar un archivo .pdf en una base de datos MySQL usando PHP.

Es todo bien, excepto por el contenido del archivo. No importa cómo me parece intentar escapar caracteres especiales, la consulta siempre falla, sobre todo con "Desconocido comandos \ n".

addslashes

he utilizado, mysql_real_escape_string, removeslashes etc.

¿Alguien tiene alguna idea sobre cómo escapar el contenido del archivo?

Muchas gracias,

¿Fue útil?

Solución

He utilizado la siguiente secuencia antes, que parece funcionar muy bien, y pueda almacenar todos los datos en la base de datos, incluyendo imágenes, archivos PDF, matrices de datos, etc ...:)

Almacenamiento de los datos (puede ser una cadena, matriz, objeto, etc.);

En primer lugar, convertir los datos en una cadena codificada en base64

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

A continuación, almacenar datos de cadena que en el PP ...


Recuperando los datos;

Extraer los datos de la cadena de la db

decodificar los datos de nuevo a lo que quiere (es posible que tenga que realizar un paso adicional después de éste en función de los datos de entrada, matriz, imagen, etc.)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

Esto sin duda me ayudó a almacenar lo que necesitaba para almacenar en una base de datos mysql!

Otros consejos

No veo por qué desea almacenar un archivo en una base de datos, pero sugiero que eche un vistazo a declaraciones preparadas .

Guess: Es posible que ocurra errores debido a la incompatibilidad entre conjuntos de caracteres. PDF es, probablemente, un archivo binario por lo que necesita para asegurarse de que la columna db está configurado para manejar eso.

Además del problema de escape que puede encontrar en "paquetes demasiado grandes" errores si el (MySQL) variable de sistema max_allowed_packet se establece en un valor "pequeña".
El uso de la extensión mysqli, preparado estados y mysqli_stmt :: send_long_data que pueda evitar ambos problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top