PHP - Problema con consulta

 
Vista:
sin imagen de perfil
Val: 54
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema con consulta

Publicado por Humberto (25 intervenciones) el 20/07/2015 19:01:05
Hola, quería saber si me pueden ayudar con un problemita.
Tengo la siguiente funcion :
1
2
3
4
5
6
7
8
9
10
11
12
13
function Busca( $componenteId, $atributoId )
  {
     $link=ConectarBD();
 
     $result=$link->query("select * from componentes_atributos
                              where (componenteid='$componenteId' and atributoid='$atributoId')" );
 
     $rta="no-existe";
     if ( $result->num_rows > 0 )   $rta="existe";
 
     $link->close();
     return $rta;
 }

Se supone que num_rows guarda la cantidad de filas resultantes de la consulta, pero en este caso y sabiendo que el componente y el atributo no estan en la tabla, num_rows nunca es cero. AUN cuando la tabla componentes_atributos está vacía. Con lo cual $rta guarda "existe".
Por favor si alguien alcanza a ver algun error que yo no, desde ya agradezco su tiempo...

He probado usando el ciclo siguiente pero obtengo el mismo resultado.

1
2
3
4
5
6
7
8
9
10
11
$result=$link->query("select * from componentes_atributos ");
     $existe=0;
 
     while( $row = $result->fetch_array() ) {
 
        if ( $row['componenteid']==$ComponenteId && $row['atributoid']==$AtributoId ) {
             $existe=1;
             break ;
         }
     }
     // ingresa al ciclo aun cuando no haya registros...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 12
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema con consulta

Publicado por Rafael (40 intervenciones) el 22/07/2015 09:51:00
Hola:

La pregunta es mas como de CSI o simplemente trampa...

Como sea tienes algun registro en la tabla conponentes_atributos donde el componenteId el atributoId sean vacios???

Sin ver la tabla es dificil decirte ...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema con consulta

Publicado por Humberto (25 intervenciones) el 22/07/2015 18:24:58
Gracias Rafael por tu respuesta, pero no hay trampa y si no sé si será un caso para CSI, pero si para mi es un misterio

La tabla está vacía, no tiene registros y num_rows me devuelve 1.

La función Busca que puse arriba no está completa pues si no existe el registro que busco hago un insert en la tabla pero aparentemente al llamar a la función (desde un boton en otra página), ésta se ejecuta dos veces, la primera insertando correctamente y la segunda vez me indica que ya existe, es por eso que num_rows me da 1 (con la tabla vacía y queriendo insertar un registro).

Aqui la funcion completa y con su nombre real. GRACIAS DE NUEVO!

Ah. usé una varible $_SESSION como contador y al visualizarla efectivamente me dá como resultado dos.

¡CUALQUIER SUGERENCIA ES BIENVENIDA!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
 
  function AgregaCompAtributo( $ComponenteId, $AtributoId )
  {
 
     if ( ! isset( $_SESSION[ 'flag'] ) ) $_SESSION[ 'flag'] = 1 ;
 
     echo "<br>FLAG   :".$_SESSION[ 'flag']   ;
 
     $link=ConectarBD();
 
     $result=$link->query("select * from componentes_atributos
                                 where (componenteid='$ComponenteId') and (atributoid='$AtributoId')" );
 
     if ( $result->num_rows != 0 ) {
        $link->close() ;
        return "existe";
     }
     else {
 
           echo "<br>Agregando atributo..." ;
 
           $_SESSION[ 'flag']++ ;
 
           $rta=$link->query("insert into componentes_atributos
                                   ( componenteid, atributoid) values 
                                   ( '$ComponenteId', '$AtributoId' )" )
                                   or die ( "<br>ERROR:".mysqli_error( $link ) );
 
           $link->close() ;
 
           return "no-existe" ;
 
     }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar