Estoy buscando la mejor manera para comprobar y ver si los resultados se devuelven en una consulta. Tengo la sensación de escribir esta parte de código mucho y a veces me da errores, y a veces no.

Por ejemplo, puedo ejecutar esta consulta para comprobar si un nombre de usuario existe antes de la inserción de una nueva en la base de datos.

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

A continuación, desea comprobar y ver si los resultados fueron devueltos. Aquí hay una manera en que yo lo hago:

if (!$result) { PERFORM ACTION }

Si la primera forma no funciona, entonces a veces esto:

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

A continuación, 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 hacer esto?

  • Para este ejemplo, vamos a suponer que la consulta no es producir un error.
  • Si no hay ningún error en la consulta, la primera prueba es sin sentido, a continuación,. La segunda es la mejor manera si es un «SELECT *» la última sólo es útil si usted tiene un SELECT COUNT(*) u otros agregados de la función. Pero por favor, por la cordura bien, para usar PDO 🙂
InformationsquelleAutor timroman | 2010-11-26

13 Comentarios

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

    Para PHP 5 y 7 y por encima de usar mysqli:

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

    Este, tiene mi voto.

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

    • Si sql fallar, $resultado no es válido mysql resultado de los recursos, lo que puede mysql_num_rows hacer ?
    • cierto, pero fue apenas vale un voto abajo!? Todavía es un método válido para comprobar la O/P pregunta: estoy buscando la mejor manera para comprobar y ver si los resultados se devuelven en una consulta.
    • Racertim preguntó cómo comprobar el número de filas – y no se si el SQL falla, por lo que este es un legítimo respuesta. Voto por esto.
    • mysql_num_rows devolverá false si $resultado no es válido php.net/manual/en/function.mysql-num-rows.php
    • no es válido el método para comprobar, restaurar de nuevo
    • nada, excepto la última mysql_result también devolverá false
    • Prueba con «empty()» podría ser una opción si no es necesario para saber si la declaración se produce un error o si la consulta devuelve cero filas.
    • En caso de que si alguien estaba buscando PDO comando sería rowcount para pdo .php.net/manual/en/pdostatement.rowcount.php
    • esto se debe if (mysql_num_rows($resultado)>0) no es igual
    • si usted lee OP pregunta con cuidado, verá que se realiza la acción cuando no hay resultados, por lo que es correcto tal como se muestra.
    • Actualización : Usar mysqli_num_rows($result) == 0 como mysql_num_rows($resultado) no funciona con la versión de php > 7 (que he comprobado)

  2. 12

    Una forma de hacerlo es comprobar lo que mysql_num_rows devuelve. Un mínimo ejemplo completo sería el 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 manejan adecuadamente en el caso de que sea false (lo cual podría ser causado por un error); probablemente por la también llamada mysql_error y registra el error en alguna parte.

    • [Upvoted de contenido, pero quería hablar de esto.] Menores de estilo nit: odio ver a «=» en el interior de un si. Demasiado similar a «==». Más fácil de leer si hacer la asignación de antes el if. (Me paso mucho tiempo en mi carrera de depuración de otras personas de código…)
  3. 5

    Siempre podemos hacer consultas para obtener algunos datos, se devuelve como un objeto. Entonces la mayoría de nosotros convertir a la matriz para el bucle a través de las filas fácilmente. En php «empty()» función se utiliza para comprobar si una matriz está vacía, es decir, si no tiene los datos en ella. Para que podamos comprobar si se devuelve la matriz de representación de consulta no está vacía haciendo como esto

    if(!empty($result)){
               //DO STUFF
    }
    • Por favor, elaborar sobre esto.
    • No, no uso empty. Un montón de otras stackoverflow puestos a hablar de hacerlo causando errores, cuando un valor se podría 0 o '0', en php estos son igual a false. Usted necesita para probar que $resultado es (no), específicamente, de la misma manera, false. IMPORTANTE: también malo sería if (result != false), por la misma razón. Código correcto es if ($result !== false).
  4. 3

    ¿Qué es más lógico, a continuación, probar el TIPO de la variable de resultado antes de procesar?
    Es de tipo ‘boolean’ o ‘recurso’. Cuando se utiliza un valor booleano para el parámetro con mysqli_num_rows, una advertencia se genera debido a que 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);  
     }
    • Upvoted como válido, claro, la opción. Sin embargo, en la práctica, el mismo resultado se logra mediante la simple código: if ($result === false). NOTA: esto debe ser === no ==. Que garantiza que usted está haciendo pruebas sólo para «boolean false». El opuesto de la prueba sería if ($result !== false).
  5. 2

    De todas las opciones de arriba me gustaría utilizar

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

    de cheques contra el resultado como el de abajo,

    if (!$result) { PERFORM ACTION }

    Esto será cierto si un mysql_error se produce de manera tan efectiva, si se ha producido un error que podría entrar a un duplicado del nombre de usuario…

  6. 1

    Utilizar el uno con mysql_fetch_row porque «Para SELECCIONAR, MOSTRAR, DESCRIBIR, EXPLICAR, y otras declaraciones de regresar conjunto 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. «

    • De ninguna manera, mysql_fetch_row obtendrá los resultados. Él se está preguntando para saber si el resultado que se devuelve o no, teniendo en cuenta un selecto.
  7. 0

    Por lo general el uso de la === (triple es igual a) 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;
        }
    }
  8. 0
    $result = $mysqli->query($query);
    if($result){
        perform action
    }

    esta es la forma en que lo hacen, usted podría también lanzar una más allí con un troquel…

  9. 0

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

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

    Esto representará un 0 y la false que es devuelto por mysql_num_rows() en caso de error.

  10. 0

    mysqli_fetch_array() devuelve NULL si no hay ninguna fila.

    Procesal de estilo:

    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 ...
    }
  11. 0
    $connect = new mysqli('localhost', 'user', 'password', 'db');
    $result = $connect->query("select * from ...");
    $count=$result->num_rows;
    if(empty($count)){
    echo"Query returned nothing";
    }
    else{
    echo"query returned results";
    } 
  12. -1
    if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

    De esta manera comprobar y actuar si el resultado es positivo, ( tiene un registro en la DB para que coincida con la consulta) , de la otra manera (==0) realiza la acción cuando el resultado no fue dado.

    • El OP es casi seguro dijo exactamente lo que quería decir – aviso que dieron a las TRES variaciones, todos los cuales hacer algo cuando hay cero resultados.
  13. -3
    if (mysql_num_rows($result)>0) { PERFORM ACTION }
    if ($result) { PERFORM ACTION }
    • Realmente no estás añadir nada nuevo a la pregunta, después de 2 años!
    • lo peor es que esto es una terrible manera de hacer lo que debería ser un if this else that construir. Esto probablemente va a realizar AMBAS acciones, que no puede ser lo que se pretendía. Esta respuesta está roto.

Dejar respuesta

Please enter your comment!
Please enter your name here