sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo almacenar archivos .pdf en MySQL como BLOB usando PHP?

EDITADO PARA AÑADIR :El siguiente código está desactualizado y no funcionará en PHP 7. Consulte la nota al final de la respuesta para obtener más detalles.

Suponiendo una estructura de tabla de un ID de número entero y una columna de DATOS de blob, y suponiendo que se utilizan funciones de MySQL para interactuar con la base de datos, probablemente podría hacer algo como esto:

$result = mysql_query 'INSERT INTO table (
    data
) VALUES (
    \'' . mysql_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf')) . '\'
);';

Sin embargo, una advertencia:el almacenamiento de blobs en bases de datos generalmente no se considera la mejor idea, ya que puede causar que la tabla se hinche y tiene una serie de otros problemas asociados. Un mejor enfoque sería mover el archivo a algún lugar del sistema de archivos donde se pueda recuperar y almacenar la ruta al archivo en la base de datos en lugar del archivo en sí.

Además, se desaconseja el uso de llamadas de función mysql_* ya que esos métodos están en desuso y no están construidos con versiones de MySQL más nuevas que 4.x en mente. Debería cambiar a mysqli o PDO en su lugar.

ACTUALIZAR :las funciones mysql_* están en desuso en PHP 5.x y se ¡ELIMINAN COMPLETAMENTE EN PHP 7! Ahora no tiene más remedio que cambiar a una abstracción de base de datos más moderna (MySQLI, PDO). Decidí dejar intacta la respuesta original anterior por razones históricas, pero en realidad no la uso

He aquí cómo hacerlo con mysqli en modo de procedimiento:

$result = mysqli_query ($db, 'INSERT INTO table (
    data
) VALUES (
    \'' . mysqli_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf'), $db) . '\'
);');

La forma ideal de hacerlo es con declaraciones preparadas MySQLI/PDO.