Foros del Web » Programando para Internet » PHP »

mysql_fetch_row

Estas en el tema de mysql_fetch_row en el foro de PHP en Foros del Web. Hola, Este es un trozo de mi código: Código: $result=mysql_query("select tipo from jerarquia where padre = $tipo "); $filas=mysql_num_rows($result); echo"filas=$filas"; if(mysql_num_rows($result)<>0){ while ($fila=mysql_fetch_row($result)){ Y este ...
  #1 (permalink)  
Antiguo 25/09/2009, 08:58
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años, 6 meses
Puntos: 3
mysql_fetch_row

Hola, Este es un trozo de mi código:

Código:
$result=mysql_query("select tipo from jerarquia where padre = $tipo ");
        $filas=mysql_num_rows($result);
        echo"filas=$filas";
        if(mysql_num_rows($result)<>0){
            while ($fila=mysql_fetch_row($result)){
Y este es el error que me da:

Cita:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\imagenes\prueba.php on line 8
La línea 8 es el while.

El resultado del select cuando aparece el error es que no hay registros que cumplan la condición y efectivamente, el echo me muestra cero. No entiendo cómo es que entra a leer la línea 8, cuando no debería pasar el if. Si me sale el warning es que entra, ¿no?

En cualquier caso, si $result corresponde a un resultado sin ninguna línea, ¿Es necesario un if para evitarlo, o simplemente el while devuelve un cero en la primera pasada y no entra en ninguna ocasión?

No sé lo que le pasa a este código y tampoco sé cómo gestionar el caso de que lea línea por línea un resultado y no me de error si no existe ninguna línea en el resultado.
  #2 (permalink)  
Antiguo 25/09/2009, 09:36
Avatar de Gurrutello  
Fecha de Ingreso: enero-2002
Ubicación: Ontario,Toronto [Canada]
Mensajes: 2.017
Antigüedad: 22 años, 10 meses
Puntos: 6
Respuesta: mysql_fetch_row

Hola
Ya has obtenido el numero de "rows" en la linea.

$filas=mysql_num_rows($result);

por lo que podrias hacer

if($filas>0){
while ($fila=mysql_fetch_row($result)){
}
}
Espero que te sirva
Un saludo
__________________
Un Saludo
www.tutores.org
Asp | Php | Javascript | Perl | Coldfusion | Flash | +- 2000 codigos
  #3 (permalink)  
Antiguo 25/09/2009, 09:38
Avatar de cemansilla  
Fecha de Ingreso: septiembre-2007
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 214
Antigüedad: 17 años, 2 meses
Puntos: 6
Respuesta: mysql_fetch_row

Ese error efectivamente sucede cuando queres recorrer registros que no existen, quiza deberias cambiar la condicion por algo asi por ejemplo:

Código PHP:
if(!empty($results)){ ... } 
  #4 (permalink)  
Antiguo 25/09/2009, 09:39
Avatar de kike00  
Fecha de Ingreso: febrero-2005
Ubicación: El Salvador
Mensajes: 180
Antigüedad: 19 años, 9 meses
Puntos: 7
Respuesta: mysql_fetch_row

el problema puede venir porque estas usando un operador no valido dentro del if,
en vez de poner if(mysql_num_rows($result)<>0) debes de poner if(mysql_num_rows($result)!=0) o que es lo mismo a poner if(mysql_num_rows($result))
  #5 (permalink)  
Antiguo 25/09/2009, 10:14
Avatar de PacoRuiz  
Fecha de Ingreso: abril-2009
Mensajes: 254
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: mysql_fetch_row

Pongo el código entero. He probado vuestras propuestas y no funcionan, el error debe estar en otro lado. He añadido algunos echo. Muestro el resultado:

Código:
<?php
function suprimehijos($tipo,$opcion){
    if ($opcion<>'opcion3'){
        $result=mysql_query("select tipo from jerarquia where padre = $tipo ");
        $filas=mysql_num_rows($result);
        echo"filas=$filas<br>";
        echo "tipo=$tipo, opcion=$opcion<br>";
        if($filas>0){
            while ($fila=mysql_fetch_row($result)){
                $categoría=$fila[0];
                if($opcion=='opcion1'){
                    mysql_query("delete from tipos where IDtipo=$categoria");
                    suprimehijos($categoría,'opcion1');
                    mysql_query("delete from jerarquia where tipo=$categoria");
                    mysql_query("delete from tipos where IDtipo=$tipo");
                }
                if($opcion=='opcion2'){
                    mysql_query("delete from tipos where IDtipo=$tipo");
                    $opcion="opcion4";
                    echo"voy a llamar a suprimehijos:$categoría,$opcion<br>";
                    suprimehijos($categoría,$opcion);
                }
                if($opcion=='opcion4'){
                   mysql_query("delete from jerarquia where tipo=$categoria AND padre=$tipo");
                   $result=mysql_query("select count (*)from jerarquia where tipo =$categoria");
                   if(!$result){
                        mysql_query("delete from tipos where IDtipo=$categoria");
                   } 
                }
                echo "suprimehijos $categoría,$opcion";
                suprimehijos($categoría,$opcion);
            }
            mysql_query("delete from jerarquia where padre=$tipo");
            mysql_query("delete from tipos where IDtipo=$tipo");
        }
    }
    if($opcion=='opcion3'){
        $result=mysql_query("select padre from jerarquia where tipo = $tipo ");
        while ($fila=mysql_fetch_row($result)){
            $abuelo=$fila[0];
            echo"el abuelo es $abuelo";
            $resultado=mysql_query("select tipo from jerarquia where padre = $tipo ");
            while ($linea=mysql_fetch_row($resultado)){
                $categoria=$linea[0];
                echo"el nieto es $categoria";
                mysql_query("delete from jerarquia where tipo=$categoria");
                mysql_query("Insert jerarquia (tipo,padre) values ('$categoria','$abuelo')");
            }
        }
    
        mysql_query("delete from jerarquia where tipo=$tipo");
        mysql_query("delete from jerarquia where padre=$tipo");
        mysql_query("delete from tipos where IDtipo=$tipo");
        
    }
}
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$tipo=$_POST['tipo'];
$opcion=$_POST['opcion'];
$opcioncat=$_POST['opcioncat'];
suprimehijos($tipo,$opcion);
/*alert
echo "
<script language='JavaScript'>
var prueba = 'La categoría ha sido suprimida corréctamente. Compruebe la nueva clasificación';
alert(prueba);
location.href = \"http://localhost/imagenes/formsuprimetipo.php\";
</script>";
                         */
?>
Y lo que muestra es:

Cita:
filas=1
tipo=16, opcion=opcion2
voy a llamar a suprimehijos:18,opcion4
filas=0
tipo=18, opcion=opcion4
suprimehijos 18,opcion4
filas=0
tipo=18, opcion=opcion4

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\imagenes\prueba.php on line 9
Estoy harto de mirarlo, pero según yo lo veo desde la primera vez que dice filas=0, no debería entrar en el if, y no debería llamar otra vez a suprimehijos, pero lo hace, y luego no lo vuelve a hacer. No entiendo nada.

El caso es que este código de prueba sí funciona:

Código:
<?php
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
function suprimehijos($tipo,$opcion){
    if ($opcion<>'opcion3'){
        $result=mysql_query("select tipo from jerarquia where padre = $tipo ");
        $filas=mysql_num_rows($result);
        echo"filas=$filas";
        if(mysql_num_rows($result)<>0){
            while ($fila=mysql_fetch_row($result)){
                echo"hola";
            }
        }
    }
}
$tipo=8;
$opcion='opcion4';
suprimehijos($tipo,$opcion);


?>
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 21:36.