Laravel:¿Cómo puedo guardar una imagen en base 64 en la base de datos?

publicado por: Anonymous

Resulta que tengo el siguiente código para hacer un update en laravel con query builder.

 public function editarCedente(Request $request)
    {
        $id_cedente_e = $request->id_cedente_edit;
        $nombre_cedente_e = $request->edit_nombre_cede;
        $path = $request->file('edita_imagen_cedente');
        $imagen_cedente_e = File::get($path);
        //llamo a la funcion estatica de un archivo que he creado 
        //para el Procedimiento alamacenado
        $edita_cedente = S_Update_Cedente::get_update_cedente($id_cedente_e,$nombre_cedente_e,base64_encode($imagen_cedente_e));
        return redirect()->route('cedentes');
    }

Este es la función estática

public static function get_update_cedente($id_cedente_e,$nombre_cedente_e,$imagen_cedente_e)
{
     $update_cedente = DB::select('exec S_Update_Cedente '.$id_cedente_e.', "'.$nombre_cedente_e.'", "'.$imagen_cedente_e.'" ');

  return $update_cedente;
}

El error que me da es el siguiente:

introducir la descripción de la imagen aquí

Entonce no se que podrá ser si estoy haciendo algo mal o necesito otra forma de hacer esto, los tipos de datos serian los siguientes en la base de datos sql server:

  • id_cedente tipo int.
  • nombre_cedente tipo varchar.
  • imagen_cedente tipo image

PD: es un requerimeinto guardalo en base 64 en la base de datos ,
también pensé en guardar solo la url de la imagen.

solución

Por las comillas dobles te está tomando los datos como un identificador (nombre de tabla o columna según el contexto) y como el base64 es muy grande salta ese error (identifier mu grande), si la imagen fuera pequeña te daría el error “invalid column name” por ejemplo el base64 de un gif transparente: R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 puede ser usado como nombre de tabla/columna pero en este esquema no se encontraría.

podes probar usando single quotes

$update_cedente = DB::select(
  'exec S_Update_Cedente '.$id_cedente_e.', "'.$nombre_cedente_e.'", ' .
  " '". $imagen_cedente_e. "'");

o llamando al procedure vía parámetros

return DB::select(
    'call S_Update_Cedente(?,?,?)',
     array($id_cedente_e, $nombre_cedente_e,$imagen_cedente_e);
);

o como señalan en los comentarios desactivar QUOTED_IDENTIFIER en el SQL
cómo y donde desactivarlo dependerá del store procedure para ejemplo te dejo un fiddle:
http://www.sqlfiddle.com/#!18/11d01

en la pagina de msdn hay un ejemplo de combinar el ON y el OFF

https://docs.microsoft.com/es-es/sql/t-sql/statements/set-quoted-identifier-transact-sql

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *