elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  insertar valor de la variable en mysql desde una aplicacion en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: insertar valor de la variable en mysql desde una aplicacion en c  (Leído 6,326 veces)
txenfsm

Desconectado Desconectado

Mensajes: 6


Ver Perfil
insertar valor de la variable en mysql desde una aplicacion en c
« en: 22 Enero 2012, 12:12 pm »

Hola amigos, estoy relizando una aplicacion en c que debe insertar valores de una variable en c, lo que realizo para ello es :
sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('%s','%s','%s')",vble_cadena1, vble_caracter2, vble_enterolargo3);
mysql_query(conn,consulta);
 
bien pues al relizar estas lineas me da error y no se si es porque las variables no son del mismo tipo que lo son en la base de datos. ¿tiene algo que ver?
Lo pregunto porque si en vez esas linea pongo:

sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('hola1','hola2','hola3')");
mysql_query(conn,consulta);

si que funciona.
Espero que me podais ayudar porque no se donde tengo el fallo. gracias de antemano.
Saludos


En línea

fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #1 en: 22 Enero 2012, 12:43 pm »

Hola txenfsm.

Si los tipos de variable son los que el nombre sugiere deberías cambiar tus especificadores de formato.
 En vez de VALUES('%s','%s','%s') debería ser VALUES('%s','%c','%d'), así sprintf se leerá una cadena, un carácter y un entero:



sprintf(consulta, "INSERT INTO mitabla (campo1,campo2,campo3) VALUES('%s','%c','%d')",vble_cadena1, vble_caracter2, vble_enterolargo3);


En línea

txenfsm

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #2 en: 22 Enero 2012, 16:50 pm »

Hola fabianjsm , gracias por contestar.
si bueno eso fue una errata xD.
A lo que me refiero es que por ejemplo yo, la base de datos con la que trabajo tiene un campo fecha de tipo date, y en la aplicacion existe una variable fecha de tipo char, entonces al poner:
sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%s')",nomb, id, fecha);
 y ejecutar la aplicacion me salta un error, por lo que no se si la sentenca esta bien?
De nuevo gracias de antemano. Un saludo
En línea

fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #3 en: 26 Agosto 2012, 14:37 pm »

Hola txenfsm, estuve ausente del foro por unos cuantos meses!
A esta altura espero que hayas solucionado tu problema, de no ser así, la expresión como la escribes sólo funcionara si las tres variables (nomb, id y fecha) son del tipo “const char *”. Si fecha es del tipo “char” y la demás variables son “const char *” debería ser así:

sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%c')",nomb, id, fecha);
En línea

Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #4 en: 26 Agosto 2012, 18:12 pm »

Hola txenfsm. Mira he posteado tu solucion en un post ya hace algunas semanas, no es recomendable formatear una entrada en sprintf() con %c si fecha es tipo date en MySQL, tendrias que utilizar %s, porque C puede manejar automaticamente los tipos date de MySQL como strings o cadenas, lo que no puede hacer es manejar datos muy largos de MySQL con %c es algo logicamente absurdo.

Tu error puede ser por el paso incorrectos de argumentos a sprintf(), mira fijate:

Puedes hacer lo siguiente mira:

Código
  1. char fecha[10];
  2.  
  3. sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);


trata de fijarte en el post que publique mira:

http://foro.elhacker.net/programacion_cc/base_de_datos_con_mysql_desde_c_excelente-t366557.0.html

Suerte !!  :laugh:
« Última modificación: 26 Agosto 2012, 18:21 pm por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #5 en: 26 Agosto 2012, 23:16 pm »

Estimado, lo escribo con ánimo de disipar la confusion.

No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits?

Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares (http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix.

Utilizando tu ejemplo:

char fecha[20];
time_t now = time(NULL);
strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);
En línea

Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: insertar valor de la variable en mysql desde una aplicacion en c
« Respuesta #6 en: 26 Agosto 2012, 23:48 pm »

Estimado, lo escribo con ánimo de disipar la confusion.

No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits?

Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares (http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix.

Utilizando tu ejemplo:

char fecha[20];
time_t now = time(NULL);
strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);

No no mira creo que estas erratico, tienes que poner mas atencion a tu lectura, en ningun momento hable de chars larrgo en un sentido de que soporte mas bytes, solamente que no puedes hacer que un vector de 50 o 20 bytes se pueda concatenar con un char de 8 bytes, que es lo que pasa en el caso de txenfsm. Solo eso quiero dejar claro, sino preguntale a txenfsm que si que le funciono ...
« Última modificación: 26 Agosto 2012, 23:50 pm por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines