Programación Web y Scripting > PHP
Error extraño
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étodo mostrará datos de una consulta de varias tablas * @param string $query sql query * @param integer $tipo El tipo de query que se ejecutará * @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 ú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á 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étodo mostrará datos de una consulta de varias tablas * @param string $query sql query * @param integer $tipo El tipo de query que se ejecutará * @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 ú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 ú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á 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
[#] Página Siguiente
Ir a la versión completa