2010-05-15 15 views
5

Lo que estoy tratando de hacer es: (programación)mysql_affected_rows() siempre devuelve 1 a pesar de que ninguna fila se actualizó

estado

actualización donde id es algo, si no hay filas en las que actualizan, dan error: no podemos encontrar la grabar con id algo, de lo contrario dar mensaje de éxito.

Aquí estoy usando mysql_affected_rows() para saber si una fila se actualizó o no, pero siempre devuelve 1, por lo que el usuario recibe un mensaje de éxito, aunque no haya una fila actualizada.

¿Alguien puede decirme qué podría ser?

Aquí está el código:

function update_sql($sql) { 


    $this->last_query = $sql; 

    $r = mysql_query($sql); 

    if (!$r) { 
    $this->last_error = mysql_error();   
    return false; 
    }  
    $rows = mysql_affected_rows(); 
    if ($rows == 0) return true; // no rows were updated 
    else return $rows; } 

Este código devuelve 1.

+0

¿Podría mostrarnos el fragmento de código en el que ocurre esto? –

Respuesta

4

Eso se debe a que true imprimirá como "1" si se utiliza echo. Para la depuración intente usar var_dump(), o deje que su función devuelva 0 (que me parece, en este caso, la mejor opción).

Una pequeña nota; Creo que deberías tratar de hacer que tu código sea un poco más legible (si el código en tu pregunta tiene el mismo diseño que el código en tu archivo). Tratar de bloques de código de sangría, utilice líneas separadas para el cierre de llaves, etc ...

+0

+1 Buena conjetura educada dada la falta de información en la pregunta. –

+0

Gracias por la sugerencia, voy a intentarlo. El código parecía apropiado en mi editor, pero tuvo un efecto doble cuando lo pegué aquí ... – happyhardik

+0

Bien, en ese caso ignoras mi pequeña nota :) –

2

Ésta es sólo una suposición ...

Tal vez su función funciona como exceptúan? Tal vez este fragmento de código if ($rows == 0) return true; funciona bien, y devuelve true pero trata ese valor como entero (boolean true se puede mostrar como 1)? Haz: var_dump(uddated_sql('YOUR QUERY')) y comprueba si devuelve valor booleano verdadero o entero 1.

Cuestiones relacionadas