Lo que quiero, es insertar una imágen como un Blob en una BD MySQL, mi tabla tiene la siguiente estructura:
Cita:
Y mi código para guardar lo obtenido desde el formulario es el siguiente:CREATE TABLE `noticias` (
`id_noticia` int(4) NOT NULL auto_increment,
`autor` varchar(255) default NULL,
`titulo` varchar(255) default NULL,
`categoria` varchar(255) default NULL,
`fecha` datetime NOT NULL default '0000-00-00 00:00:00',
`noticia` blob,
`imagen_binario` blob,
`imagen_nombre` varchar(255) default NULL,
`imagen_peso` varchar(15) default NULL,
`imagen_tipo` varchar(15) default NULL,
KEY `id_noticia` (`id_noticia`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
`id_noticia` int(4) NOT NULL auto_increment,
`autor` varchar(255) default NULL,
`titulo` varchar(255) default NULL,
`categoria` varchar(255) default NULL,
`fecha` datetime NOT NULL default '0000-00-00 00:00:00',
`noticia` blob,
`imagen_binario` blob,
`imagen_nombre` varchar(255) default NULL,
`imagen_peso` varchar(15) default NULL,
`imagen_tipo` varchar(15) default NULL,
KEY `id_noticia` (`id_noticia`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
Código PHP:
include("conex.php");
$connect = conectarse();
elegir();
if ($HTTP_POST_VARS)
{
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre. Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
echo "Error, no se encontró la imágen"; //o como se llame el formulario ..
exit;
}
// archivo temporal (ruta y nombre).
$imagen_nombre_temporal=$_FILES[archivo][tmp_name] ;
// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$imagen_contenido = addslashes(fread(fopen($imagen_nombre_temporal, "rb"), filesize($imagen_nombre_temporal)));
// Obtener del array FILES (superglobal) los datos del binario .. nombre, tamaño y tipo.
$imagen_nombre=$_FILES[archivo][name];
$imagen_peso=$_FILES[archivo][size];
$imagen_tipo=$_FILES[archivo][type];
//recibimos las variables enviadas por el formulario
$titulo=$_POST[titulo];
$autor=$_POST[autor];
$categoria=$_POST[categoria];
$articulo=$_POST[articulo];
//insertamos los registros almacenados en las variables
$consulta = "INSERT INTO noticias VALUES (NULL,'$autor','$titulo','$categoria',NOW(),'$articulo', '$imagen_contenido', '$imagen_nombre', '$imagen_peso', '$imagen_tipo')";
$grabar = mysql_query($consulta,$connect);
if($grabar){
?><script language="JavaScript">window.location="noticias_admin.php"</script><?php }
else{
echo "Se ha producido un error al publicar la noticia.<BR>Vuelve a Intentarlo.";
}
}
El asunto es que el código corre, pero a la hora de revisar con el PhpMyAdmin el registro recien ingresado, en vez de aparecer X y el lapiz para borrar y editar respectivamente, sale un signo de interrgogación (?).
El problema está definitivamente en el campo imagen_binario, pues he probado insertando todos los demás campos menos ese, y no da esos ? ?, recien los da cuando ingreso ese campo diferente de NULL. Ahora, para tener una mejor referencia, les cuento que cuando intento darle editar a ese registro con el ? ? el MySQL me da el siguiente HORROR: "MySQL ha devuelto un valor vacío (i.e. cero columnas)."
Seguro de que uds me podrán dar luces en este dolor de cabeza , se despide
Demis