• Viernes 19 de Abril de 2024, 17:46

Autor Tema:  Error extraño  (Leído 3500 veces)

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Error extraño
« en: Domingo 25 de Septiembre de 2011, 21:10 »
0
Hola chicos de SoloCodigo, vengo teniendo un error extraño al ejecutar un query y usar las funciones mysql_fetch_array y mysql_num_rows de PHP, el query es este:
Código: SQL
  1. SELECT ADDDATE( wf.fecha_inicio, DATEDIFF( plpr.tiempo_limite, "2000-01-01 08:00:00" ) ) AS tiempo FROM ct_plantilla_workflow AS wf, ct_plantilla AS pl, ct_plantilla_protocolo AS plpr WHERE wf.usu_asigna = "ECASTANO" AND wf.plantilla_id = pl.id AND plpr.plantilla_id = pl.id AND wf.proceso = plpr.orden
si lo ejecuto directamente en el mysql me salen los datos que deben salir, de hecho el query en PHP se ejecuta bien con el mysql_query, pero las funciones arriba puestas me muetran los siguientes errores
Citar
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\AppServ\www\aplicaciones\gestion\include\clases\clases.php on line 58

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\AppServ\www\aplicaciones\gestion\include\clases\clases.php on line 59
e imprimo el Resource y me muestra esto: Resource id #681 y he mirado bien el resource y el 1 sobra, ósea, en realidad el dato es Resource id #68 y el 1 se agrega, acá está el código que ejecuta eso:
Código: PHP
  1.   /*
  2.    * Este método mostrará datos de una consulta de varias tablas
  3.    * @param string $query    sql query
  4.    * @param integer $tipo    El tipo de query que se ejecutará
  5.    * @param string $error    Para mostrar un error diferente al default de MySQL
  6.    * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el último indexado
  7.    */
  8.   //function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />')
  9.   function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />') {
  10.     $this->result = mysql_query($query) or die(mysql_error().$error.$query.'</b>');
  11. echo $this->result;
  12.  
  13.     if ($this->result==0){
  14.       echo "Consulta ejecutada sin exito";
  15.     }
  16.  
  17.     /*
  18.      * Dependiendo del tipo de consulta SQL escojida extraemos las variables
  19.      */
  20.     switch($tipo)
  21.     {
  22.       case 'SELECT':
  23.       case 0:
  24.            $this->numrows = mysql_num_rows($this->result);
  25.            $this->arrayRegistros = mysql_fetch_array($this->result);
  26.            $this->ultimo = '';
  27.            break;
  28.       case 'INSERT':
  29.       case 1:
  30.            $this->ultimo = mysql_insert_id();
  31.            $this->numrows = '';
  32.            $this->arrayRegistros = '';
  33.            break;
  34.       case 'UPDATE':
  35.       case 'DELETE':
  36.       case 'ALTER':
  37.       case 2:
  38.       case 3:
  39.       case 4:
  40.            $this->numrows = '';
  41.            $this->arrayRegistros = '';
  42.            $this->ultimo = '';
  43.            break;
  44.       case 'SHOW TABLES':
  45.       case 'OPTIMIZE TABLE':
  46.       case 'TRUNCATE TABLE':
  47.       case 5:
  48.       case 6:
  49.       case 7:
  50.            $this->numrows = '';
  51.            break;
  52.     }
  53.  
  54.     /*
  55.      * Estos son todos los datos que se pueden extraer de un query
  56.      * Ac&aacute; lo que se hace es devolverlo todo en un array
  57.      */
  58.     $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);
  59.  
  60.     if ($trace==1)
  61.     {
  62.       debug_print_backtrace();
  63.     }
  64.  
  65.     return $arrayRetorno;
  66.   }
  67.  
  68.  

Esto me pasa en Windows con el AppServ o Wamp instalado, en Linux no me muestra ningun error, alguna información al respecto
El pasado son solo recuerdos, el futuro son solo sueños

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re:Error extraño
« Respuesta #1 en: Lunes 26 de Septiembre de 2011, 17:29 »
0
Hola, a simple vista no veo nada malo en la consulta. Que tal si pruebas llevando la consulta a lo más básico y a medida que te va funcionando le vas agregando más, hasta llegar a completarla.

Saludos,
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re:Error extraño
« Respuesta #2 en: Martes 27 de Septiembre de 2011, 01:10 »
0
Muestra el llamado de tu funcion

es la unica conexion a la bd abierta?
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re:Error extraño
« Respuesta #3 en: Martes 27 de Septiembre de 2011, 02:32 »
0
La solucione con una pachotada, les muestro:
Código: PHP
  1.   /*
  2.    * Este m&eacute;todo mostrar&aacute; datos de una consulta de varias tablas
  3.    * @param string $query    sql query
  4.    * @param integer $tipo    El tipo de query que se ejecutar&aacute;
  5.    * @param string $error    Para mostrar un error diferente al default de MySQL
  6.    * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el &uacute;ltimo indexado
  7.    */
  8.   function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />') {
  9.     $this->result = mysql_query($query);// or die($x = mysql_error().$error.$query.'</b>');
  10.    
  11.     if ($this->result==0){
  12.       $err = explode("'", mysql_error());
  13.       /*
  14.        * Valido si es error por entrada duplicada en campo &uacute;nico
  15.        */
  16.       if (substr(mysql_error(), 0, 15)=='Duplicate entry'){
  17.         echo '<div align="center">
  18.                Registro <strong>'.$err[1].'</strong> en el campo <strong>'.$err[3].'</strong> ya existe en la Base de Datos
  19.                <br /><a href="javascript:history.back();">Volver</a>
  20.              </div>';
  21.       } else {
  22.         echo '<div align="center">'.$error.mysql_error().$query.'</div>';
  23.       }
  24.     } else {
  25.  
  26.     /*
  27.      * Dependiendo del tipo de consulta SQL escojida extraemos las variables
  28.      */
  29.     if ($this->result!=1){ // ESTA PACHOTADA ES OBLIGATORIA, TENGO GANAS DE LLORAR
  30.       switch($tipo)
  31.       {
  32.         case 'SELECT':
  33.         case 0:
  34.              $this->numrows = mysql_num_rows($this->result);
  35.              $this->arrayRegistros = mysql_fetch_array($this->result);
  36.              $this->ultimo = '';
  37.              break;
  38.         case 'INSERT':
  39.         case 1:
  40.              $this->ultimo = mysql_insert_id();
  41.              $this->numrows = '';
  42.              $this->arrayRegistros = '';
  43.              break;
  44.         case 'UPDATE':
  45.         case 'DELETE':
  46.         case 'ALTER':
  47.         case 2:
  48.         case 3:
  49.         case 4:
  50.              $this->numrows = '';
  51.              $this->arrayRegistros = '';
  52.              $this->ultimo = '';
  53.              break;
  54.         case 'SHOW TABLES':
  55.         case 'OPTIMIZE TABLE':
  56.         case 'TRUNCATE TABLE':
  57.         case 5:
  58.         case 6:
  59.         case 7:
  60.              $this->numrows = '';
  61.              break;
  62.       }
  63.     }
  64.  
  65.     /*
  66.      * Estos son todos los datos que se pueden extraer de un query
  67.      * Ac&aacute; lo que se hace es devolverlo todo en un array
  68.      */
  69.     $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);
  70.  
  71.     if ($trace==1)
  72.     {
  73.       debug_print_backtrace();
  74.     }
  75.  
  76.     return $arrayRetorno;
  77.     }
  78.   }
  79.  
El pasado son solo recuerdos, el futuro son solo sueños

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re:Error extraño
« Respuesta #4 en: Miércoles 28 de Septiembre de 2011, 00:37 »
0
Si lo que dices es un select no veo por que te habria de decir que esta duplicado, ahora si lo que quieres es validar errores yo te aconsejaria



mysql_errno() y el error de llave duplicada es el 1062


Código: PHP
  1. $errorMySQL = mysql_errno();
  2.  
  3. switch ($errorMySQL ){
  4.       case 1062:
  5.               echo 'El registro ya existe';
  6.       break;
  7.       case 1063:
  8.               echo 'Nombre de columna Incorrecto';
  9.       break; # etc
  10. }
  11.  

http://dev.mysql.com/doc/refman/4.1/en/error-handling.html

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re:Error extraño
« Respuesta #5 en: Miércoles 28 de Septiembre de 2011, 03:16 »
0
no es solo por la llave duplicada, eso era algo extra, lo extraño es que cuando ejecutaba el query anterior,
Código: SQL
  1.     SELECT ADDDATE( wf.fecha_inicio, DATEDIFF( plpr.tiempo_limite, "2000-01-01 08:00:00" ) ) AS tiempo FROM ct_plantilla_workflow AS wf, ct_plantilla AS pl, ct_plantilla_protocolo AS plpr WHERE wf.usu_asigna = "ECASTANO" AND wf.plantilla_id = pl.id AND plpr.plantilla_id = pl.id AND wf.proceso = plpr.orden
con el usuario ECASTANO y quería imprimir el resultado del query, ósea,
Código: PHP
  1. $query = '    SELECT ADDDATE( wf.fecha_inicio, DATEDIFF( plpr.tiempo_limite, "2000-01-01 08:00:00" ) ) AS tiempo FROM ct_plantilla_workflow AS wf, ct_plantilla AS pl, ct_plantilla_protocolo AS plpr WHERE wf.usu_asigna = "ECASTANO" AND wf.plantilla_id = pl.id AND plpr.plantilla_id = pl.id AND wf.proceso = plpr.orden';
  2. $result = mysql_query($query);
  3. echo $result;
Me suelta algo muy extraño: Resource id #681, ósea, el 1 en ese 68 está de más, eso es lo que estoy validando, yo creo que es casí un bug de PHP, por que si lo hubiera hecho con admin, ósea,
Código: PHP
  1. $query = '    SELECT ADDDATE( wf.fecha_inicio, DATEDIFF( plpr.tiempo_limite, "2000-01-01 08:00:00" ) ) AS tiempo FROM ct_plantilla_workflow AS wf, ct_plantilla AS pl, ct_plantilla_protocolo AS plpr WHERE wf.usu_asigna = "ADMIN" AND wf.plantilla_id = pl.id AND plpr.plantilla_id = pl.id AND wf.proceso = plpr.orden';
  2. $result = mysql_query($query);
  3. echo $result;
Me da solamente: Resource id #68 sin el 1, no sé que pueda ser y eso me tiene loco
El pasado son solo recuerdos, el futuro son solo sueños