J'ai enregistré une image dans une base de données PostgreSQL avec type de colonne BYTEA en utilisant PHP. Le problème est chaque fois que j'essaie de charger l'image dans un navigateur qu'il n'apparaît pas. La console de développeur Firefox indique que l'image est tronquée ou corrompue.
Le code PHP: p> et j'ai besoin de stocker l'image téléchargée dans une base de données - j'utilise réellement Heroku merci P> P>
4 Réponses :
Supprimer addslashes ($ data) code>. Il est redondant ici. P> Double-escaping .. deux fois h2>
$sth = $pdo->prepare('INSERT INTO mytable(somecol, byteacol) VALUES (:somecol, :byteacol)');
$sth->bindParam(':somecol', 'bork bork bork');
$sth->bindParam(':byteacol', $thebytes, PDO::PARAM_LOB);
$sth->execute();
S'il vous plaît aider, mais je ne peux pas récupérer s'il vous plaît aide ici est mon image $ User_Image = user :: Où ('id', auth :: utilisateur (utilisateur) -> id) -> Premier () ;
@Sandipjha poster une nouvelle question s'il vous plaît.
Il est préférable d'utiliser Postgres gros objets em> si vous devez vraiment stocker des images dans votre base de données. Dans la table forte> userinfo forte> au lieu de la Insérer une image Dans la base de données: p> récupérez une image de la base de données: p> Le envisager d'utiliser le type stocker des liens vers des images est particulièrement pratique au cas où vous utiliserez une image plus d'une fois. Cependant, vous devez faire attention à supprimer des images non utilisées de votre base de données (fonction PHP pg_lo_unlink ()). P> lo code> type à partir du lo code> extension au lieu d'utiliser le type OID code>. Utilisation de lo code> vous donne une "suppression de l'orpheline" automatique, où la suppression d'une ligne d'une table supprimera automatiquement le grand objet associé, il est donc bon pour les cas où une ligne de table "possède" un objet important. p>
Merci gars, il fonctionne comme un charme désolé désolé je ne pouvais pas voter de réponses qu'ils ont besoin de la réputation - vient de rejoindre Stackoverflow hier - après avoir supprimé la fonction AddSlashes, les images ont commencé à charger @CRAIG SINGER Vous êtes un pro !!! !!!!!!
Les gros objets sont un peu plus douloureux à gérer, cependant; Au minimum, vous voudrez utiliser l'extension lo code> de sorte que vous obtenez une suppression automatique des objets orphelins. Personnellement, je préférerais bytea code> pour des choses comme des vignettes; Il sera stocké hors de la ligne dans une table de toasts afin de ne pas avoir une incidence sur la performance des requêtes qui ne le demandent pas, mais c'est pratique et rapide à accéder au besoin.
J'utilise de gros objets depuis des années. Éviter les orphelins me semblait si évident que je n'en ai même pas mentionné. J'ai édité la réponse pour un futur lecteur. Merci pour votre note.
J'ai trouvé un moyen étrange d'obtenir cela aussi sans utiliser de PDO. P>
Utilisez un champ de texte dans PostgreSQL au lieu de BYTEA. Sur INSERT, préparez vos données comme celle-ci: p>
Ensuite, lorsque vous souhaitez afficher le fichier après votre requête, utilisez: p>
Je ne vais pas prétendre que je reçois pourquoi, mais cela a travaillé pour moi! P> $ imgdta = pg_escapape_string (bin2hex ($ filedata)); code> p>
Echo Pack ("h *", $ img ["filedata"]); code> p>
Comme la source de vos données est un fichier dans le système de fichiers, il vous semble efficace de trouver une inspiration ici :
Dans votre dB Créez une fonction auxiliaire, exécutez comme superutilisateur: P>
#make sure that postgres will have access to the file
chmod($_FILES['thumbnail']['tmp_name'], 0644);
pg_query("update userinfo set image=(select bytea_import('".$_FILES['thumbnail']['tmp_name']."')) where email='$user'");
Pourquoi avez-vous besoin i> pour stocker des images dans la base de données? C'est inefficace de toutes les manières imaginables.
@ user80168 Il y a au moins une certaine manière où il est loin d'être inefficace. Il peut être beaucoup plus rapide d'aller chercher de petites images comme les miniatures dans une seule demande. Il peut être beaucoup plus efficace que de jouer à des jeux terribles avec le renommage de fichiers, la validation de deux phases et
FSYNC () code> si vous avez besoin d'une sémantique acide appropriée et de cohérence des données pour vos images. Il est plus facile de sauvegarder à petite échelle (mais beaucoup plus fort à grande échelle). Comme toute autre chose, c'est un compromis où parfois cela peut être génial, d'autres fois, cela peut être affreux, surtout, c'est bon.Parfois, l'efficacité n'est pas l'aspect le plus important. Tous les projets que j'ai travaillé ont eu une forme de compromis. En tant que professionnel, j'essaie d'identifier les aspects les plus importants et de les aborder d'abord.