2010-11-26 22 views
54

Estoy buscando la mejor manera de verificar y ver si se devolvieron los resultados en una consulta. Siento que escribo mucho esta parte del código y algunas veces obtengo errores, y otras veces no.¿La mejor manera de verificar si los resultados de MySQL fueron en PHP?

Por ejemplo, ejecuto esta consulta para verificar si existe un nombre de usuario antes de insertar uno nuevo en la base de datos.

$result = mysql_query("SELECT * FROM ..."); 

Luego quiero verificar y ver si se devolvieron los resultados. He aquí una manera de hacerlo:

if (!$result) { PERFORM ACTION } 

Si el primer camino no funciona, entonces a veces esta voluntad:

if (mysql_num_rows($result)==0) { PERFORM ACTION } 

Entonces, incluso vi que podía hacerlo de esta manera, el otro día :

list($total) = mysql_fetch_row($result); 
if ($total==0) { PERFORM ACTION } 

¿Cuál es la mejor manera de hacerlo?

+0

Para este ejemplo, vamos a suponer que la consulta no está produciendo un error. – timroman

+0

Si no hay ningún error en la consulta, la primera prueba no tiene sentido entonces. El segundo es la mejor manera si es un "SELECT \ *", el último solo es útil si tiene un SELECT COUNT (\ *) u otra función agregada. Pero por favor, por favor, use PDO :-) – Rahly

Respuesta

106
if (mysql_num_rows($result)==0) { PERFORM ACTION } 

Esto obtiene mi voto.

OP consulta suponiendo que no devuelve ningún error, por lo que este debe ser uno de la manera

+0

¿puedo preguntar por qué se votó negativamente? – benhowdle89

+4

@ benhowdle89 - Si sql falla, $ result no es un recurso de resultado válido de mysql, ¿qué puede hacer mysql_num_rows? – ajreal

+3

cierto, pero ¡apenas valía la pena votar! Todavía es un método válido para verificar la pregunta de O/P: estoy buscando la mejor manera de verificar y ver si se obtuvieron resultados en una consulta. – benhowdle89

8

Una forma de hacerlo es comprobar qué devuelve mysql_num_rows. Un ejemplo completo mínima sería la siguiente:

if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { 
    // there are results in $result 
} else { 
    // no results 
} 

Pero se recomienda que compruebe el valor de retorno de mysql_query y manejar correctamente en el caso de que sea false (que sería causado por un error); probablemente también llamando al mysql_error y registrando el error en alguna parte.

+0

[Upvoted para el contenido, pero quería mencionar esto.] Nit de estilo menor: Odio ver "=" dentro de un if. Demasiado similar a "==". Más fácil de leer si realiza la asignación * antes de * el 'si'. (Paso mucho tiempo en mi carrera depurando el código de otras personas ...) – ToolmakerSteve

1

Utilice el uno con mysql_fetch_row porque "Para SELECT, SHOW, describir, explicar y otras declaraciones de regresar de resultados, mysql_query() devuelve un recurso en caso de éxito, o FALSE en caso de error.

Para otro tipo de sentencias SQL, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() devuelve TRUE en caso de éxito o FALSE en caso de error. "

+1

De ninguna manera, mysql_fetch_row obtendrá los resultados. Él está preguntando si se devuelve un resultado o no, considerando un SELECCIONAR. – Shoe

2

de todos las opciones de arriba usaría

if (mysql_num_rows($result)==0) { PERFORM ACTION }

comprobación con el resultado, como a continuación

if (!$result) { PERFORM ACTION } 

Esto será cierto si un mysql_error se produce de manera tan efectiva si se ha producido un error, a continuación, puede introducir un usuario-nombre duplicado ...

0

por lo general, yo uso el === (triple equals) y __LINE__, __CLASS__ para localizar el error en mi código:

$query=mysql_query('SELECT champ FROM table') 
or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error()); 

mysql_close(); 

if(mysql_num_rows($query)===0) 
{ 
    PERFORM ACTION; 
} 
else 
{ 
    while($r=mysql_fetch_row($query)) 
    { 
      PERFORM ACTION; 
    } 
} 
-2
if (mysql_num_rows($result)>0) { PERFORM ACTION } 
if ($result) { PERFORM ACTION } 
+3

No está agregando nada nuevo a la pregunta, ¡después de 2 años! –

+0

peor, esta es una forma terrible de hacer lo que debería ser un constructo 'if this else that'. Esto probablemente realizará AMBAS acciones, que no pueden ser lo que se pretendía. Esta respuesta está rota. – ToolmakerSteve

4

Siempre que realizamos consultas para obtener algunos datos, se devuelve como un objeto. Entonces, la mayoría de nosotros lo convertimos en una matriz para recorrer las filas fácilmente. En php, la función "empty()" se usa para verificar si una matriz está vacía, es decirsi no tiene datos. Así podemos comprobar si es devuelto representación de matriz de consulta no está vacía, haciendo como esto

if(!empty($result)){ 
      //DO STUFF 
} 
+2

Por favor, elabore sobre esto. – Stunner

+0

No, no use 'empty'. Muchos otros posts de stackoverflow hablan sobre hacerlo causando errores, cuando un valor puede ser '0' o' '0'', * en php estos son falsos *. Debe probar que $ result es (no) específicamente, idénticamente, 'falso'. IMPORTANTE: también sería incorrecto 'if (result! = False)', por el mismo motivo. El código correcto es 'if ($ result! == false)'. – ToolmakerSteve

3

Lo que es más lógico después probando el tipo de la variable de resultado antes de procesar? Es del tipo 'boolean' o 'resource'. Cuando utiliza un booleano para parámetro con mysqli_num_rows, se generará una advertencia porque la función espera un recurso.

$result = mysqli_query($dbs, $sql); 

if(gettype($result)=='boolean'){ // test for boolean 
    if($result){ // returned TRUE, e.g. in case of a DELETE sql 
     echo "SQL succeeded"; 
    } else { // returned FALSE 
     echo "Error: " . mysqli_error($dbs); 
    } 
} else { // must be a resource 
    if(mysqli_num_rows($result)){ 

     // process the data  

    } 
    mysqli_free_result($result); 
} 
+2

Upvoted como una opción válida y clara. Sin embargo, en la práctica, el mismo resultado se logra con un código más simple: 'if ($ result === false)'. NOTA: esto debe ser '===' not '=='. Eso garantiza que está probando solo para "booleano falso". La prueba opuesta sería 'if ($ result! == false)'. – ToolmakerSteve

-1
if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

De esta manera se comprueba y actuar si un resultado es positivo, (que tiene un registro en su base de datos que coincida con su consulta), a la inversa (== 0) que ha realizado la acción cuando no hay resultado fue dado.

+0

Es casi seguro que el OP dijera exactamente lo que significaban: nótese que dieron TRES variaciones, todas las cuales hacen algo cuando no hay resultados. – ToolmakerSteve

0
$result = $mysqli->query($query); 
if($result){ 
    perform action 
} 

así es como lo hago, también podría lanzar un else allí con un troquel ...

0

Si aún desea realizar la acción si el $result no es válido:

if(!mysql_num_rows($result)) 
    // Do stuff 

Esto representará un 0 y el false que se devuelve por mysql_num_rows() en caso de error.

0

mysqli_fetch_array() devuelve NULL si no hay ninguna fila.

En el estilo de procedimiento:

if (! $row = mysqli_fetch_array($result)) { 
    ... no result ... 
} 
else { 
    ... get the first result in $row ... 
} 

En el estilo orientado a objetos:

if (! $row = $result->fetch_array()) { 
    ... 
} 
else { 
    ... get the first result in $row ... 
} 
Cuestiones relacionadas