Foros del Web » Programando para Internet » PHP »

Funcion SELECT no devuelve datos

Estas en el tema de Funcion SELECT no devuelve datos en el foro de PHP en Foros del Web. Hola amigos Tengo la siguiente funcion que ejecuta la consulta MySql, la cual me trae el precio del producto. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 11/02/2015, 13:38
 
Fecha de Ingreso: febrero-2015
Ubicación: Lima - Peru
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
Funcion SELECT no devuelve datos

Hola amigos

Tengo la siguiente funcion que ejecuta la consulta MySql, la cual me trae el precio del producto.


Código PHP:
Ver original
  1. function traerPrecio($precioproducto) {
  2.     //codigo de conexion $db
  3.    
  4.     $consulta = $db->prepare('SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  5.                     FROM precio                
  6.                     WHERE precio.codigo=
  7.                    (SELECT producto.codigo
  8.                     FROM producto
  9.                     WHERE producto.codigo='. "'" . $precioproducto . "'". ')');
  10.  
  11.     $consulta->execute();
  12.     $campos = $consulta->fetchAll();
  13.     return $campos;  
  14.  
  15. }

pero no me devuelve ningun dato cuando llamo a la funcion, algun error en la codificacion?

Gracias por la ayuda
  #2 (permalink)  
Antiguo 11/02/2015, 13:52
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: Funcion SELECT no devuelve datos

Si la pregunta es por qué no te funciona una función programada en PHP, es tema del foro de PHP, no de BBDD.

OFF TOPIC.

Movido a PHP.


Empieza por debuggear la función y asegurarte que los datos de entrada están llegando realmente.
Luego, captura la sentencia creada y si está bien, pruebala manualmente en phpMyadmin.
Entonces veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/02/2015, 14:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Funcion SELECT no devuelve datos

Cita:
pero no me devuelve ningun dato cuando llamo a la funcion, algun error en la codificacion?
¿Cómo podemos adivinar cómo es que usas dicha función?

¿Podrías depurar tu consulta a mano para ver exactamente lo que se ejecuta?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 11/02/2015, 14:13
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: Funcion SELECT no devuelve datos

Vamos a suponer que tienes un producto con codigo = 2...
¿Qué te devuelve esto si lo ejecutas en phpMyadmin:
Código MySQL:
Ver original
  1. SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  2. FROM precio
  3. WHERE precio.codigo= (SELECT producto.codigo
  4.                     FROM producto
  5.                     WHERE producto.codigo='2')

Si eso devuelve datos, entonces simplemente no le está llegando nada en $precioproducto...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/02/2015, 15:32
 
Fecha de Ingreso: febrero-2015
Ubicación: Lima - Peru
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Funcion SELECT no devuelve datos

gracias gnzsoloyo, es cierto es tema de php, tendre cuidado en donde hago la pregunta en adelante.

Cita:
Empieza por debuggear la función y asegurarte que los datos de entrada están llegando realmente.
En la funcion hago lo siguiente para depurar, retorno la variable $res que devuelve true //hago el comentario en la misma funcion.
Código PHP:
Ver original
  1. function traerPrecio($precioproducto) {
  2.         //codigo de conexion $db
  3.        
  4.         $consulta = $db->prepare('SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  5.                        FROM precio                
  6.                        WHERE precio.codigo=
  7.                       (SELECT producto.codigo
  8.                        FROM producto
  9.                        WHERE producto.codigo='. "'" . $precioproducto . "'". ')');
  10.      
  11.         $res = $consulta->execute();
  12.         return $res; //retorno variable $res e imprimo en php despues de llamar a la funcion
  13. //y me devuelve bool(true)
  14.         //$campos = $consulta->fetchAll();
  15.         //return $campos;  
  16.      
  17.     }
Cita:
Luego, captura la sentencia creada y si está bien, pruebala manualmente en phpMyadmin.
Cuando ejecuto la sentencia en phpMyadmin, ve devuelve datos el codigo de producto, el precio pau@S y el precio pbu@S.


gracias pateketrueke
Cita:
¿Cómo podemos adivinar cómo es que usas dicha función?

la funcion traerPrecio() lo llamo dentro de un foreach. esta es la linea de codigo dentro del foreach.

Código PHP:
Ver original
  1. foreach($listarproductos as $productos){
  2.         echo var_dump($productos['codigo'])//imprimo el campo codigo que trae el
  3. //array $listarproductos : string(1) "2"
  4.     $precios=traerPrecio($productos['codigo']);
  5.     echo var_dump($precios)//aqui imprimo el return variable $res de la funcion
  6. //traerPrecio() que devuelve bool(true)
  7. }
el array listarproductos me guarda esta consulta mysql:
Código MySQL:
Ver original
  1. SELECT codigo, descripcion FROM productos;

pero cuando el retorno la variable $campos e imprimo en php me devuelve: array(0) { } , cuando me deberia devolver el precio pau@S y pbu@S con el codigo de producto, no se en que momento sucede el error.

Código PHP:
Ver original
  1. function traerPrecio($precioproducto) {
  2.         //codigo de conexion $db
  3.        
  4.         $consulta = $db->prepare('SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  5.                        FROM precio                
  6.                        WHERE precio.codigo=
  7.                       (SELECT producto.codigo
  8.                        FROM producto
  9.                        WHERE producto.codigo='. "'" . $precioproducto . "'". ')');
  10.      
  11.         $consulta->execute();    
  12.         $campos = $consulta->fetchAll();
  13.         return $campos;  //al devolver la variable $campos e imprimir en php me
  14. //devuelve : array(0) { }
  15.      
  16.     }
  #6 (permalink)  
Antiguo 11/02/2015, 15:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Funcion SELECT no devuelve datos

Bueno, pues por eso debes depurar tu código en ejecución.

¿Cómo sabes la consulta exacta que se ejecuta si no la imprimes?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/02/2015, 17:34
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: Funcion SELECT no devuelve datos

Cita:
En la funcion hago lo siguiente para depurar, retorno la variable $res que devuelve true //hago el comentario en la misma funcion.
Ese es un error conceptual muy común cuando estás empezando a trabajar en programación con acceso a BBDD.
Que una query enviada a la base devuelva TRUE no implica que devuelve datos, sólo indica que no se produjo un error de ejecución, permisos, o sintaxis. Pero NO que la consulta devolviese registro.
Obtener un array con cero registros no es un error. Es un resultado probable cuando no hay datos que cumplan las condiciones.
¿Se entiende la distinción?

El problema es simple: Si esto devuelve datos:
Código MySQL:
Ver original
  1. SELECT codigo, descripcion FROM productos;
y esto otro, no:
Código MySQL:
Ver original
  1. SELECT producto.codigo
  2. FROM producto
  3. WHERE producto.codigo='. "'" . $precioproducto . "'". '
Entonces lo que tiene un dato que no existe en la tabla "productos" es la variable... Eso, o está vacía, y lo que se está ejecutando en MySQL es esto:

Código MySQL:
Ver original
  1. SELECT producto.codigo
  2. FROM producto
  3. WHERE producto.codigo=''

¿Se entiende?

Si la variable contiene un valor que no existe en la base, o está vacía, simplemente se ejecutará y se obtendrá un array vacío, con los nombres d los encabezados indicados en el SELECT, es decir: "codigo", "pau@S" y "pbu@S".
Pero no tendrás datos.

Una de las formas de obligar a MySQL a devolver un error es cuando validas contra un dato numérico. Los números no van entre apostrofos, de modo que cuando creas la query, si el campo a comparar es numérico, pones así:
Código PHP:
$consulta $db->prepare("SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
    FROM precio                
    WHERE precio.codigo = 
        (SELECT producto.codigo
        FROM producto
        WHERE producto.codigo="
.$precioproducto.")"); 
De ese modo, si la variable llega vacía, la query queddará armada de este modo:
Código MySQL:
Ver original
  1. SELECT precio.codigo, precio.`pau@S`, precio.`pbu@S`
  2.     FROM precio                
  3.     WHERE precio.codigo =
  4.         (SELECT producto.codigo
  5.         FROM producto
  6.         WHERE producto.codigo= )
Si observas, le falta el segundo término de la condición en el WHERE, lo que dispararía un error de sintaxis, que te permitiría instantáneamente saber que el dato no está llegando a tu función...

El usar apostrofos en datos numéricos de la base esconde errores de programación. No es recomendable.

Queda claro que esto sólo aplica a columnas numericas y datos numéricos, ¿no? Si el dato es de caracteres o fechas, los apóstrofos son obligatorios para el SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bases-de-datos-general, campos, devuelve, funcion, select
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 19:06.