Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment stocker des fichiers .pdf dans MySQL en tant que BLOB en utilisant PHP ?

MODIFIÉ POUR AJOUTER :Le code suivant est obsolète et ne fonctionnera pas dans PHP 7. Voir la note vers le bas de la réponse pour plus de détails.

En supposant une structure de table d'un ID entier et d'une colonne DATA blob, et en supposant que les fonctions MySQL sont utilisées pour s'interfacer avec la base de données, vous pourriez probablement faire quelque chose comme ceci :

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

Un mot d'avertissement cependant, stocker des blobs dans des bases de données n'est généralement pas considéré comme la meilleure idée car cela peut provoquer un gonflement des tables et un certain nombre d'autres problèmes qui y sont associés. Une meilleure approche serait de déplacer le fichier quelque part dans le système de fichiers où il peut être récupéré et de stocker le chemin d'accès au fichier dans la base de données au lieu du fichier lui-même.

De plus, l'utilisation des appels de fonction mysql_* est déconseillée car ces méthodes sont effectivement obsolètes et ne sont pas vraiment construites avec les versions de MySQL plus récentes que 4.x à l'esprit. Vous devriez plutôt passer à mysqli ou PDO.

MISE À JOUR  :les fonctions mysql_* sont obsolètes en PHP 5.x et sont ENTIÈREMENT SUPPRIMÉS EN PHP 7 ! Vous n'avez plus d'autre choix que de passer à une Database Abstraction plus moderne (MySQLI, PDO). J'ai décidé de laisser la réponse originale ci-dessus intacte pour des raisons historiques, mais ne l'utilisez pas réellement

Voici comment procéder avec mysqli en mode procédural :

$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 manière idéale de le faire est d'utiliser des instructions préparées MySQLI/PDO.