2012-02-01 26 views
17

He mostrado la tabla con registro y la imagen "Eliminar". en la imagen de eliminación, haga clic en Estoy eliminando el registro con ajax. Supongo que hay tres registros con id 40,41,42 si elimino el registro con ID = 40, responce devuelve "1" y el registro se elimina, la próxima vez si de nuevo hago clic en borrar imagen, de nuevo devuelve "1".codeigniter db-> delete() devuelve true siempre?

codeigniters db-> método delete() siempre devuelve "1"? ¿Debo verificar manualmente si el registro existe y luego proceder a eliminar? a continuación es mi código IIN ajax.php

$res = $this->db->delete(tbl_user_groups, array('owner_id' => $admin,'user_group_id'=>$gid)); 

if($res) echo json_encode (array("success"=>"true")); 
else  echo json_encode (array("success"=>"false")); 

Respuesta

41

El db-> delete() vuelve TRUE, si es exitosa operación de eliminación. Solo devolvería FALSE si NO PODRÍA borrar la fila. Creo que se debe comprobar algo como:

$this->db->affected_rows(); 

que devuelve número y no un booleano, que se puede comprobar con sus Si las condiciones.

+0

ahaaa affected_rows() funcionó perfecto para mí. Gracias Sudhir. –

3

Note: This answer refers to an old version. In current version delete() returns a boolean.

¿Por qué cree delete() devuelve un valor lógico? Es un objeto!

var_dump() le habría dicho esto. También te diría qué tipo de objeto es.

Ver Código Fuente: https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/DB_active_rec.php#L1716

+0

yo estaba pensando en la forma en mysql (donde vuelve verdadera): P thatnks de todos modos para el enlace, esto me ayudará en el futuro. –

+0

Supongo que el valor de retorno es 'mixed', porque una parte de devolver un objeto eventualmente también puede devolver' FALSE' y cualquier '' $ this-> query' devuelve que también está 'mixed'. – vstm

+0

Se define como '@return object' pero mixed sería mejor. Incluso puede ser un objeto, booleano o incluso 'nulo'. – PiTheNumber

4

cuando borramos de db en CodeIgniter 2.2.0 usando $this->db->delete() podemos operar con dos banderas: 1. $this->db->_error_message() y 2. $this->db->affected_rows()

Así que después de la consulta db obtenemos 1 y 2 como:

eliminado: '', 1

no se eliminan: '', 0 // remar con id no se encuentra, pero SQL terminado bien

SQL ERROR: string, -1

Mi elección es la siguiente comprobación:

$this->db->delete($this->table,array('id'=>$id)); 
if ($this->db->_error_message()) { 
    $result = 'Error! ['.$this->db->_error_message().']'; 
} else if (!$this->db->affected_rows()) { 
    $result = 'Error! ID ['.$id.'] not found'; 
} else { 
    $result = 'Success'; 
} 
+1

a partir de CI 3.0 esto produce: 'Llamada al método indefinido CI_DB_mysqli_driver :: error_message()' - parece que el mejor método es usar affected_rows() – taber

Cuestiones relacionadas