el contenido del archivo PHP MYSQL escapan problema
-
13-09-2019 - |
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".
addslasheshe utilizado, mysql_real_escape_string, removeslashes etc.
¿Alguien tiene alguna idea sobre cómo escapar el contenido del archivo?
Muchas gracias,
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.