Foros del Web » Programando para Internet » PHP »

resultados query

Estas en el tema de resultados query en el foro de PHP en Foros del Web. Hola, yo solía utilizar estas instrucciones para ver si un query me devolvía o no resultados cuando busco un registro concreto, es decir que espero ...
  #1 (permalink)  
Antiguo 01/12/2008, 11:32
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 10 meses
Puntos: 1
resultados query

Hola,

yo solía utilizar estas instrucciones para ver si un query me devolvía o no resultados cuando busco un registro concreto, es decir que espero sólo 1 resultado:

Código PHP:
$strSQL "SELECT * FROM ... WHERE xxx=1";
$result mysql_query($strSQL)or die(mysql_error());
if (
$result) {

}
else {

pues bien, ahora veo que hay servidores donde no funciona y siempre entra en el if aunque no exista el registro (por ejemplo xxx=5819235231) y por supuesto no puede devolver ningún valor, ya que en realidad no ha encontrado ningún registro.

Soluciono el problema usando:

if (mysql_num_rows($result)>0) en lugar de if ($result), pero me pregunto el porqué. Seguramente se trata de algún parámetro de configuración del PHP.ini

¿alguien conoce el tema?

gracias

Última edición por dblanco; 01/12/2008 a las 11:38
  #2 (permalink)  
Antiguo 01/12/2008, 12:22
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 22 años
Puntos: 17
Respuesta: resultados query

Yo pensaba que mysql_query sólo devolvía FALSE si había algún error al realizar la consulta.
  #3 (permalink)  
Antiguo 01/12/2008, 12:37
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Respuesta: resultados query

Como dice Keysher, mysql_query ejecuta la consulta y da FALSE solo en caso de error.
Lo que tenes que hacer es algo así:


Código PHP:
$strSQL "SELECT * FROM ... WHERE xxx=1";
$result mysql_query($strSQL)or die(mysql_error());
if(
$rs mysql_fetch_assoc($result) ) {
 
#Hay asignacion a $rs
}else{
 
#No resultados

Ojo, no es que mysql_num_rows esté mal, pero para el caso del ejemplo dado no me parece correcto usarlo.


Edit: El manual siempre es el mejor aliado: http://ar2.php.net/mysql_query
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 01/12/2008, 15:19
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: resultados query

nicolaspar, por qué no es correcto usar mysql_num_rows() en este caso? No querrás decir aduecuado, o práctico?

Si quisiéramos crear un ciclo en base a los resultados (en el caso de que nuestra consulta devuelva varios) tendríamos problemas.

  #5 (permalink)  
Antiguo 01/12/2008, 16:36
 
Fecha de Ingreso: enero-2004
Mensajes: 207
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: resultados query

aclarar que hasta ahora yo sólo había programado en PHP modificando plantillas Wordpress. Y yo no sé qué asignaciones internas harás Worpress pero utiliza if ($result) en muchas ocasiones (siempre que no se espera un resultado múltiple).

De todas formas, supongo que es mucho mejor utilizar if (mysql_num_rows($result)>0) o if($rs = mysql_fetch_assoc($result) ) como sugiere nicolaspar, ya que fuera de Wordpress no funciona de otra forma.

salduos
  #6 (permalink)  
Antiguo 02/12/2008, 07:22
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Respuesta: resultados query

Worpress si mal no recuerdo usa una class, la cual funciona diferente. No usa las funciones mysql_xx directamente.


Cita:
nicolaspar, por qué no es correcto usar mysql_num_rows() en este caso? No querrás decir aduecuado, o práctico?

Si quisiéramos crear un ciclo en base a los resultados (en el caso de que nuestra consulta devuelva varios) tendríamos problemas.
Claro, adecuado para el caso. Si quieres usar un Do While puedes hacerlo, pero creo que no aplica y solo por un tema de que es redundante.

Si queres iterar ya es otra cosa....hay un paginado de por medio (en el 99% de los casos) y demás cosas que hacen necesario obtener un total. Aún así no uso mysql_num_rows, uso en su lugar SQL_CALC_FOUND_ROWS y FOUND_ROWS():

Cita:
$sql = "
SELECT
SQL_CALC_FOUND_ROWS
campo1, campo2, campo3
FROM
tabla ";
$r = mysql_query( $sql );

$rAux = mysql_query("SELECT FOUND_ROWS()");
$rsAux = mysql_fetch_row($rAux);
$total = $rsAux[0];
mysql_free_result($rAux);

echo $total;
Es mejor usar este método.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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:46.