2009-03-27 20 views
6

Tengo un campo varbinary (MAX) en una base de datos de SQL Server 2005. Estoy intentando descubrir cómo insertar datos binarios (es decir, una imagen) en ese campo usando PHP. Estoy usando ODBC para la conexión a la base de datos de SQL Server. He visto una serie de ejemplos que explican esto para usar con una base de datos MySql pero no he podido hacer que funcione con SQL Server. Gracias.Insertar datos binarios en SQL Server usando PHP

Respuesta

3

La respuesta simple es: detén lo que estás haciendo.

No desea almacenar archivos binarios dentro de una base de datos a menos que tenga algunos problemas de seguridad muy específicos. En su lugar, desea almacenar sus nombres de archivo (posiblemente cambiar el nombre de los archivos para evitar conflictos) y luego almacenarlos en la base de datos. Si la seguridad es un problema, colóquelos en una carpeta no web y use su código para recuperar el archivo y solo sirva el archivo si el usuario tiene acceso a él.

Almacenar imágenes o archivos dentro de una base de datos es un desperdicio de espacio de archivos, un mal uso de las bases de datos y no dejar que las cosas hagan lo que mejor hacen; el sistema de archivos conoce los archivos, la base de datos conoce los datos.

+0

¿qué pasa con una cadena de texto gzdeflated? Los datos binarios de texto comprimido parecen estar en casa en una base de datos. – chiliNUT

+3

No preguntó SI debería, preguntó cómo podía hacerlo. Debe responder la pregunta del OP; luego, si es necesario, agregue sus pensamientos/opiniones. – Losbear

+1

Si bien este es un buen consejo, no ayuda a las personas que buscan problemas similares a Google en busca de una solución. No todos los datos binarios son imágenes o archivos. – 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; 
} 

uso:

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

MyImage es el campo de SQL Server en el que el tipo es imagen

+1

Definite +1. Esto debe ser elegido answear. Hay muchos casos en los que se justifica el uso de Blob (es más fácil hacer una copia de seguridad de 1 archivo de base de datos, en lugar de 10 millones de archivos realmente pequeños, por ejemplo). Solo una observación: la función no tiene retorno al final. –

2

No voy a decir que es una mala práctica, depende de lo grande que es la imagen y cómo tu aplicación lo usa.

Si el archivo por debajo de 256K de tamaño, almacenar en db es más eficiente; Se recomienda más de 1 mb, almacenar en el sistema de archivos.

Storing images in SQL Server?

Cuestiones relacionadas