2010-01-13 35 views
12

Tengo esta consulta y si se devuelve con éxito, quiero que otra función la procese, si no, no procese esa función.necesito probar si la consulta sql fue exitosa

Este es el código para ejecutar la consulta

global $DB; 
$DB->query("UPDATE exp_members SET group_id = '$group_id' WHERE member_id = '$member_id'"); 

Me imagino que es algo así como ...

if($DB) { 
    //success 
} else { 
    //failure 
} 
+3

Definir "exitoso". ¿Exitoso como en "funcionó sin error", o fue exitoso como en "registro encontrado con id $ member_id"? –

+1

Es posible que desee considerar el uso de PDO en lugar de mysqli –

+3

@ d03boy Quisiera desestimar ese comentario. No puede suponer lo que está usando ya que no lo mencionó. Además, ha habido algunas discusiones sobre PDO y MySQLi y ambas tienen sus ventajas. Por lo tanto, no puede simplemente decir 'Use PDO sobre MySQLi' –

Respuesta

22

Esta es la forma más sencilla que podría poner a prueba

$query = $DB->query("UPDATE exp_members SET group_id = '$group_id' WHERE member_id = '$member_id'"); 

if($query) // will return true if succefull else it will return false 
{ 
// code here 
} 
+3

funciona con Storeprocedures y PDO api para php? –

+3

Esto devolverá verdadero incluso si la fila 0 está afectada: solo devolverá falso si hubo un error en la consulta, por lo que para SQL de actualización sugeriría, mysql_affected_rows() –

0
if ($DB->query(...)) { success } 
else { failure } 

consulta debe devolver en caso de fallo (si está utilizando o mysql_query $ mysqli-> query). Si desea probar si la consulta de actualización en realidad hizo nada (que es una cosa totalmente diferente de "éxito") a continuación, utilizar mysql_affected_rows o $ mysqli-> affected_rows

1
global $DB; 
$status = $DB->query("UPDATE exp_members SET group_id = '$group_id' WHERE member_id = '$member_id'"); 

if($status == false) 
{ 
    die("Didn't Update"); 
} 

Si está utilizando mysql_query en el backend (sea cual sea $DB->query() utiliza para consultar la base de datos), devolverá un TRUE o FALSE para INSERT, UPDATE y DELETE (y algunos otros), comandos, en función de su estado.

3
if ($DB->rowCount() > 0) 
    {/* Update worked because query affected X amount of rows. */} 
else 
    {$error = $DB->errorInfo();} 
2

si el valor es 0, entonces no tuvo éxito, pero si a continuación, 1 éxito.

$this->db->affected_rows(); 
0

Esto ha demostrado ser el mecanismo más seguro para mí para probar la falta de inserción o actualización:

$result = $db->query(' ... '); 
if ((gettype($result) == "object" && $result->num_rows == 0) || !$result) { 
    failure 
} 
0

si no está utilizando el formato ->, usted puede hacer esto:

$a = "SQL command..."; 
if ($b = mysqli_query($con,$a)) { 
    // results was successful 
} else { 
    // result was not successful 
} 
Cuestiones relacionadas