2009-03-27 9 views
6

J'ai un champ varbinary (MAX) dans une base de données SQL Server 2005. J'essaie de comprendre comment insérer des données binaires (c'est-à-dire une image) dans ce champ en utilisant PHP. J'utilise ODBC pour la connexion à la base de données SQL Server. J'ai vu un certain nombre d'exemples qui expliquent cela pour une utilisation avec une base de données MySQL mais je n'ai pas réussi à l'utiliser avec SQL Server. Merci.Insérer des données binaires dans SQL Server en utilisant PHP

Répondre

3

La réponse simple est: arrêtez ce que vous faites.

Vous ne souhaitez pas stocker de fichiers binaires dans une base de données, sauf si vous rencontrez des problèmes de sécurité très spécifiques. Au lieu de cela, vous voulez stocker leurs noms de fichiers (éventuellement renommer les fichiers pour éviter les conflits), puis stocker dans la base de données. Si la sécurité est un problème, placez-les dans un dossier non Web et utilisez votre code pour récupérer le fichier et ne servir le fichier que si l'utilisateur y a accès.

Le stockage d'images ou de fichiers dans une base de données est une perte d'espace fichier, une mauvaise utilisation des bases de données et ne laisse pas les choses faire ce qu'elles font de mieux; le système de fichiers connaît les fichiers, la base de données connaît les données.

+0

Qu'en est une chaîne de texte gzdeflated? Les données de texte compressées binaires semblent à la maison dans une base de données. – chiliNUT

+3

Il n'a pas demandé s'il devrait - il a demandé comment il peut le faire. Vous devriez répondre à la question du PO - alors - si vous le devez, ajoutez vos pensées/opinions. – Losbear

+1

Bien que ce soit un bon conseil, il n'aide pas les gens qui google des problèmes similaires à la recherche d'une solution. Toutes les données binaires ne sont pas une image ou un fichier. – dmarra

13
function prepareImageDBString($filepath) 
{ 
    $out = 'null'; 
    $handle = @fopen($filepath, 'rb'); 
    if ($handle) 
    { 
     $content = @fread($handle, filesize($filepath)); 
     $content = bin2hex($content); 
     @fclose($handle); 
     $out = "0x".$content; 
    } 
    return $out; 
} 

utilisation:

$out = prepareImageDBString('/img/myimg.png'); 
mssql_query("INSERT INTO MyTable(MyImage) VALUES($out) "); 

MonImage est le champ SQL Server où le type est l'image

+1

Défini +1. Cela devrait être choisi answear. Il existe de nombreux cas, lorsque l'utilisation de Blob est justifiée (plus facile à sauvegarder 1 fichier de base de données, au lieu de 10 millions de fichiers vraiment petits par exemple). Juste une remarque - la fonction manque de retour à la fin. –

2

Je ne dirais pas que ce soit une mauvaise pratique, cela dépend de la taille est l'image et comment votre application l'utilise.

Si la taille du fichier est inférieure à 256 Ko, stocker en db est plus efficace; Plus de 1 Mo, stocker dans le système de fichiers est recommandé.

Storing images in SQL Server?

Questions connexes