Foros del Web » Programando para Internet » PHP »

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Estas en el tema de Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource en el foro de PHP en Foros del Web. Hola buen dia. Haber si alguien pudiese ayudarme lo que pasa es que me sale este mensaje de error en php... * Warning: mysql_fetch_assoc(): supplied ...
  #1 (permalink)  
Antiguo 22/03/2014, 01:10
 
Fecha de Ingreso: marzo-2014
Ubicación: Guanajuato
Mensajes: 1
Antigüedad: 10 años, 1 mes
Puntos: 0
Exclamación Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Hola buen dia. Haber si alguien pudiese ayudarme lo que pasa es que me sale este mensaje de error en php...

* Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\algo.php on line 11

Lo raro es que este es un archivo que contiene un codigo similar a otro solo cambian los campos de la base de datos... como en vez de ser cielo en el otro archivo es luna. el codigo es exactamnte igual. pero solo en este archivo tengo el error.
Ayuda por favor... aqui esta mi consulta


<?php

include('conexion.php');

extract($_GET);
$con=Conecta();
if(isset($id))
{
$consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con);
$lado=mysql_fetch_assoc($consulta);

$votos = $lado['like'] + 1;
$consulta = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
$res=mysql_query($consulta);
}

?>

Marca error en la linea 11... que viene siento
$lado=mysql_fetch_assoc($consulta);

Ojala alguien pueda ayudarme cn este error
  #2 (permalink)  
Antiguo 22/03/2014, 06:39
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL resul

Debes recorrerlo con un bucle while e ir extrayendo los resultados del array asociativo:

Código PHP:
Ver original
  1. while($lado=mysql_fetch_assoc($consulta)){
  2.  
  3. ...
  4.  
  5. }

  #3 (permalink)  
Antiguo 22/03/2014, 06:46
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, 5 meses
Puntos: 2658
Respuesta: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL resul

Hay algunos errores de lógica, y algunos errores indetectables en la consulta.
Mira, como muchos de los que se inicia, estás suponiendo que las cosas siempre funcionan bien, y que las consultas a la base siempre devuelven datos.
Eso es un error.
Lo primero que siempre debes considerar cuando programas es que las cosas pueden fallar, incluso aunque los datos estén bien, hasta por razones ajenas a la aplicación. Siempre puede suceder.
En consecuencia, tienes que programar para evitar que errores no contemplados genernen un mal funcionamiento del programa... y eso no lo estás haciendo.

En tu script:
Código PHP:
Ver original
  1. <?php
  2.  
  3. include('conexion.php');
  4.  
  5. extract($_GET);
  6. $con=Conecta();
  7. if(isset($id))
  8. {
  9. $consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con);
  10. $lado=mysql_fetch_assoc($consulta);
  11.  
  12. $votos = $lado['like'] + 1;
  13. $consulta = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
  14. $res=mysql_query($consulta);
  15. }
  16.  
  17. ?>
tu estás dando por sentado que la query devuelve siempre datos, pero en realidad no lo sabes. Podría fallar por otras razones, y devolverte FALSE... lo que es exactamente lo que está sucediendo. Por eso te dice "mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource ", es decir, el argumento (el resource) no es un resultado valido de MySQL, lo que implica que no está devolviendo datos. El por qué puede suceder lo veremos después, pero la solución es sencillamente prevenir el vallo validando lo que MySQL devuelve.
Esto tiene muchas formas de hacerse, pero la primera de todas es simplemente usar or die()

Código PHP:
Ver original
  1. <?php
  2.  
  3. include('conexion.php');
  4.  
  5. extract($_GET);
  6. $con=Conecta();
  7. if(isset($id)&& $id!="")
  8. {
  9. $consulta = mysql_query("SELECT like FROM productos WHERE id_producto='".$id."'" , $con) or die ("Error MySQL: ".mysql_error());
  10.  
  11. // Luego validas qué hacer si no hay erro pero tampoco datos
  12.  
  13. if($consulta)
  14.     {if(mysql_num_rows($consulta)>0)
  15.         {$lado=mysql_fetch_assoc($consulta);
  16.         $votos = $lado['like'] + 1;
  17.  
  18.         // No sobreescribas la variable. Eso está MAL
  19.  
  20.         $qry = "UPDATE productos SET like = '".$votos."' WHERE id_producto='".$id."'";
  21.         $res=mysql_query($qry)or die ("Error MySQL: ".mysql_error();
  22.         if($res) echo "Update exitoso";
  23.         }
  24.     }
  25. }
  26.  
  27. ?>

Por otro lado, a la consulta, y a tu tabla le veo un problema severo: Estás usando una palabra reservada (LIKE) como nombre de columna, lo que podría disparar un error de sintaxis en la base que no descubrirías fácilmente. AL meno no sin ver que es precisamente ese el problema.
Consejo: No uses palabras simples en inglés en los nombres de tablas, columnas o bases. Tienden a generar ese tipo de problemas, y los principiantes no los ven.
Si no puedes cambiar ese nombre de columna, pon los nombres entre acentos agudos (no confundir con apóstrofos):

Código SQL:
Ver original
  1. SELECT `like` FROM productos WHERE id_producto='".$id."'
Código SQL:
Ver original
  1. UPDATE productos SET `like` = '".$votos."' WHERE id_producto='".$id."'
__________________
¿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: mysql
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 18:07.