Programación Web y Scripting > PHP

 Error extraño

(1/2) > >>

RadicalEd:
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 ---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.ordensi 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
--- Fin de la cita ---
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 ---  /*   * Este m&eacute;todo mostrar&aacute; datos de una consulta de varias tablas   * @param string $query    sql query   * @param integer $tipo    El tipo de query que se ejecutar&aacute;   * @param string $error    Para mostrar un error diferente al default de MySQL   * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el &uacute;ltimo indexado   */  //function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />')  function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />') {    $this->result = mysql_query($query) or die(mysql_error().$error.$query.'</b>');echo $this->result;     if ($this->result==0){      echo "Consulta ejecutada sin exito";    }     /*      * Dependiendo del tipo de consulta SQL escojida extraemos las variables     */    switch($tipo)    {      case 'SELECT':      case 0:           $this->numrows = mysql_num_rows($this->result);           $this->arrayRegistros = mysql_fetch_array($this->result);           $this->ultimo = '';           break;      case 'INSERT':      case 1:           $this->ultimo = mysql_insert_id();           $this->numrows = '';           $this->arrayRegistros = '';           break;      case 'UPDATE':      case 'DELETE':      case 'ALTER':      case 2:      case 3:      case 4:           $this->numrows = '';           $this->arrayRegistros = '';           $this->ultimo = '';           break;      case 'SHOW TABLES':      case 'OPTIMIZE TABLE':      case 'TRUNCATE TABLE':      case 5:      case 6:      case 7:           $this->numrows = '';           break;    }     /*     * Estos son todos los datos que se pueden extraer de un query     * Ac&aacute; lo que se hace es devolverlo todo en un array     */    $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);     if ($trace==1)    {      debug_print_backtrace();    }     return $arrayRetorno;  }  
Esto me pasa en Windows con el AppServ o Wamp instalado, en Linux no me muestra ningun error, alguna información al respecto

arielb:
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,

F_Tanori:
Muestra el llamado de tu funcion

es la unica conexion a la bd abierta?

RadicalEd:
La solucione con una pachotada, les muestro:

--- Código: PHP ---  /*   * Este m&eacute;todo mostrar&aacute; datos de una consulta de varias tablas   * @param string $query    sql query   * @param integer $tipo    El tipo de query que se ejecutar&aacute;   * @param string $error    Para mostrar un error diferente al default de MySQL   * @return $arrayRetorno   Tiene el resultado, la cantidad de registros, un array con los registros y el &uacute;ltimo indexado   */  function query($query, $tipo=0, $trace=0, $error='<br /><b>Query ejecutado incorrectamente<br />') {    $this->result = mysql_query($query);// or die($x = mysql_error().$error.$query.'</b>');        if ($this->result==0){      $err = explode("'", mysql_error());      /*       * Valido si es error por entrada duplicada en campo &uacute;nico       */      if (substr(mysql_error(), 0, 15)=='Duplicate entry'){        echo '<div align="center">                Registro <strong>'.$err[1].'</strong> en el campo <strong>'.$err[3].'</strong> ya existe en la Base de Datos                <br /><a href="javascript:history.back();">Volver</a>              </div>';      } else {        echo '<div align="center">'.$error.mysql_error().$query.'</div>';      }    } else {     /*      * Dependiendo del tipo de consulta SQL escojida extraemos las variables     */    if ($this->result!=1){ // ESTA PACHOTADA ES OBLIGATORIA, TENGO GANAS DE LLORAR      switch($tipo)      {        case 'SELECT':        case 0:             $this->numrows = mysql_num_rows($this->result);             $this->arrayRegistros = mysql_fetch_array($this->result);             $this->ultimo = '';             break;        case 'INSERT':        case 1:             $this->ultimo = mysql_insert_id();             $this->numrows = '';             $this->arrayRegistros = '';             break;        case 'UPDATE':        case 'DELETE':        case 'ALTER':        case 2:        case 3:        case 4:             $this->numrows = '';             $this->arrayRegistros = '';             $this->ultimo = '';             break;        case 'SHOW TABLES':        case 'OPTIMIZE TABLE':        case 'TRUNCATE TABLE':        case 5:        case 6:        case 7:             $this->numrows = '';             break;      }    }     /*     * Estos son todos los datos que se pueden extraer de un query     * Ac&aacute; lo que se hace es devolverlo todo en un array     */    $arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);     if ($trace==1)    {      debug_print_backtrace();    }     return $arrayRetorno;    }  } 

F_Tanori:
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 ---$errorMySQL = mysql_errno(); switch ($errorMySQL ){      case 1062:              echo 'El registro ya existe';      break;      case 1063:              echo 'Nombre de columna Incorrecto';      break; # etc} 
http://dev.mysql.com/doc/refman/4.1/en/error-handling.html

Saludos

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa