Foros del Web » Programando para Internet » PHP »

Consulta php - mysq me trunca los caracteres.

Estas en el tema de Consulta php - mysq me trunca los caracteres. en el foro de PHP en Foros del Web. Ante todo muy buenas a todos, tengo una tabla con un campo llamado 'puntox' tipo texto que tiene el siguiente valor '74.7999639711303507'. Cuando realizo la ...
  #1 (permalink)  
Antiguo 14/01/2013, 20:18
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Consulta php - mysq me trunca los caracteres.

Ante todo muy buenas a todos, tengo una tabla con un campo llamado 'puntox' tipo texto que tiene el siguiente valor '74.7999639711303507'.
Cuando realizo la consulta en la ventana sql del phpmyAdmin del xampp me salen los caracteres completos, pero al realizarla desde php me muestra solo '74.79996397113' me elimina los 4 ultimos.
Ya he realizado CAST, CONVERT y el problema persiste, que podrá ser? Gracias.
El código para la consulta es el siguiente:

mysql_select_db($base,$conex);
$consulta = "select id,CONVERT(longitud,CHAR(25)) as longitud from $tabla where id=$carrera";
$res = mysql_query($consulta,$conex);
$item = mysql_fetch_array($res);
echo "La longitud es de: "+ $item["puntox"];
  #2 (permalink)  
Antiguo 14/01/2013, 20:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta php - mysq me trunca los caracteres.

A ver, para empezar phpMyAdmin es también PHP, por lo que de antemano el problema no es PHP.

Si la consulta en phpMyAdmin te muestra bien el dato entonces es tu programación la que está haciendo algo mal, ¿como adivinar?

Has la consulta como siempre, común y corriente, sin casting ni nada.

¿Aún así sale mal el dato?

Quiero creer pero es que la programación no miente, casi siempre es un error humano.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 14/01/2013, 20:53
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

Gracias por responder pero sin el cast también me muestra mal el dato. He puesto el campo en tipo texto, tipo varchar, double, y el problema persiste.
  #4 (permalink)  
Antiguo 14/01/2013, 20:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta php - mysq me trunca los caracteres.

A ver, seguimos viendo donde no deberíamos de ver.

¿En la base de datos sigue integro el valor tal cual?

Entonces una consulta normal debería funcionar, a menos que hagas algo que no podemos ver.

Es mas, si quieres comparte la estructura de tu BD, el dato y verás que a nadie le ocurrirá el mismo error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/01/2013, 21:09
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.



En la imagen se muestra tanto la estructura como los datos. Donde dije que el campo era puntox el campo se llama longitud.
  #6 (permalink)  
Antiguo 15/01/2013, 03:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta php - mysq me trunca los caracteres.

¿Y me puedes explicar por qué dos valores que deberían ser FLOAT lo tienes creados como TEXT y CHAR?
Por empezar, allí hay un error y de los graves...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 15/01/2013, 16:07
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

porque con float me mostraba el mismo problema comentadoo y pensè que pasandolo a texto se solucionaba.
  #8 (permalink)  
Antiguo 15/01/2013, 17:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta php - mysq me trunca los caracteres.

Un FLOAT es un decimal de punto flotante, pero a diferencia del desperdicio de espacio que tienes en el TEXT y el CHAR, sólo requiere 8 bytes para almacenar todo ese número.
Por otro lado, el problema de truncado puede perfectamente ser un tema de representación numérica de PHP y no de MySQL (que puede devolverte completo ese número, pero se debe indicar expresamente).

Además, te comento un detalle (experiencia trabajando con geolocalización): cualquier dígito decimal por detrás del sexto es completamente irrelevante, porque a partir de la esa posición decimal estás hablando de menos de 10 centímetros...
Explico mejor: Cada grado (entero) representa aproximadamente 112 Km. Luego, el primer decimal son 11,2 Km, el tercero 1,12, etc. De ese modo, al llegar al octavo estamos hablando de 0,00112 metros, lo que equivale a decir menos un centímetro...
¿Me puedes explicar para qué quieres ese nivel de precisión?
Ni siquiera lo puedes representar en un mapa.

Nota: No te olvides que Latitud y Longitud son devueltas por calculo matemático, por lo que es natural que sea un punto flotante, ya que el calculo es una triangulación sobre un geoide. Pero luego hay una gran cantidad de decimales que se desprecian por irrelevantes.

En cuanto al PHP, según el manual:
Cita:
El tamaño de un flotante depende de la plataforma, aunque un valor común consiste en un máximo de ~1.8e308 con una precisión de aproximadamente 14 dígitos decimales (lo que es un valor de 64 bits en formato IEEE).
Hay algunos considerandos más al respecto, por ejemplo el impacto de las conversiones entre cadenas de texto (string) y números, por lo que te recomiendo que leas más detalladamente el manual: http://ar.php.net/manual/es/language.types.float.php
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/01/2013 a las 17:12
  #9 (permalink)  
Antiguo 15/01/2013, 17:19
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

Bueno la verdad no sabia lo de la precision que acabas de explicarme. Lo que pasa es que quiero hacer lo siguiente:
Tener un mapa y un campo tipo select donde coloca las direcciones màs transitadas de la ciudad donde vivo y que se agregue un marcador en la direcciòn que seleccionò el usuario.
Entonces ingresè a una pàgina donde te da la latitud y longitud de cualquier punto por medio de google maps, y de esa pàgina es donde estoy recogiendo los datos de las coordenadas y son las que tengo guardadas en la base de datos. Como la pàgina me arroja esa cantidad de decimales, pensè que era necesario almacenarlo con esa cantidad de decimales.
  #10 (permalink)  
Antiguo 15/01/2013, 19:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta php - mysq me trunca los caracteres.

Cita:
Como la pàgina me arroja esa cantidad de decimales, pensè que era necesario almacenarlo con esa cantidad de decimales.
Es muy probable que los decimales te los esté almacenando, desde el momento en que Google Maps te los está entregando así, pero ten en cuenta que el truncado puede estar proviniendo (los más expertos seguro que lo saben mejor), más exactamente de PHP y no de la base.
Para ver los decimales completos de la posición almacenada lo que puedes hacer es esto, siempre y cuando los campos sean FLOAT:
Código MySQL:
Ver original
  1. SELECT FORMAT(longitud, 14) LNG, FORMAT(latitud, 14) LAT
  2. FROM tabla;
eso devolverá hasta 14 decimales (creo que es el límite que GoogleMaps te devuelve) que hayan sido almacenados en ese campo.
Eso si: Si se truncan, es problema de PHP, porque la consulta debería devolverlos (y yo los obtengo de mis tablas de geolocalización).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 15/01/2013, 19:34
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.


Gracias por responder, pero realizé la consulta que me dices y aun asi me sigue truncando.
yo ingreso a esta página para obtener las coordenadas http://www.bufa.es/google-maps-latitud-longitud/
el dato que me da, lo copio y lo pego en mi tabla.


En la imagen superior te muestro la consulta desde el phpmyadmin y en la inferior la que me muestra mi página con la consulta.
Si no se ve la imagen, ingresa aca por favor
http://imageshack.us/f/829/consultaenphpmyadmin.jpg/

Última edición por registremeaca; 15/01/2013 a las 19:54
  #12 (permalink)  
Antiguo 15/01/2013, 20:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta php - mysq me trunca los caracteres.

No confundas la consulta en el phpMyadmin, con lo que obtienes en el sript.
Al menos muestrame el script donde creas la consulta...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 15/01/2013, 20:31
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

Este es mi script:

mysql_select_db($base,$conex);

$consulta = "select id,longitud from $tabla where carrera=$carrera";

$res = mysql_query($consulta,$conex);

$item = mysql_fetch_array($res);

echo "La longitud es de: "+ $item["longitud"];
  #14 (permalink)  
Antiguo 15/01/2013, 22:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta php - mysq me trunca los caracteres.

¿Y por qué no pruebas como te digo:
Código php:
Ver original
  1. mysql_select_db($base,$conex);
  2. $consulta = "select id, FORMAT(longitud, 14) longitud from $tabla where carrera=$carrera";
  3. $res = mysql_query($consulta, $conex);
  4. $item = mysql_fetch_array($res);
  5. echo "La longitud es de: "+ $item["longitud"];
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 15/01/2013, 23:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Consulta php - mysq me trunca los caracteres.

String + -74.7999639711303507 ??? Para concatenar en PHP se usa el punto

Código PHP:
Ver original
  1. echo "La longitud es de: "+ $item["longitud"]; //MAL
  2. //(-74.79996397113)
  3. echo "La longitud es de: " . $item["longitud"]; //BIEN
  4. //(La longitud es de: -74.7999639711303507)
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #16 (permalink)  
Antiguo 16/01/2013, 10:52
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

Ok, probarè como me dices, de todas maneras el interès que has puesto en solucionar el problema. Si no me funciona lo dejarè asi porque tienes razòn en lo que dices que los demàs decimales son irrelevantes para la posicion.
Ya probè con los decimales que me muestra y esos me sirven para ubicar el marcador en mi mapa, asi que no es necesario tal precision.
Muchisimas gracias.
  #17 (permalink)  
Antiguo 16/01/2013, 10:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Consulta php - mysq me trunca los caracteres.

Claramente es un error de sintaxis en PHP, MySQL nada te va a solucionar.

Edito: Cree tu base de datos con una tabla, y este es mi resultado:

Código PHP:
Ver original
  1. <?php
  2. $c = mysql_connect('localhost', 'root', '12345');
  3. $consulta = "select id,longitud from coordenadas where carrera=215";
  4. $res = mysql_query($consulta) or die(mysql_error());
  5. $item = mysql_fetch_array($res);
  6.  
  7. echo "La longitud es de: " + $item["longitud"];
  8. //imprime -74.79996397113
  9.  
  10. echo '<hr />';
  11.  
  12. echo "La longitud es de: " . $item["longitud"];
  13. //imprime La longitud es de: -74.7999639711303507

Espero que entiendas tu error. xD

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 16/01/2013 a las 11:19
  #18 (permalink)  
Antiguo 16/01/2013, 15:37
 
Fecha de Ingreso: enero-2013
Mensajes: 13
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta php - mysq me trunca los caracteres.

Muchisimas Gracias, el error era de concatenación. Gracias a todos los que me respondieron.

Etiquetas: mysql, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:35.