2010-01-13 7 views
12

J'ai cette requête et si elle retourne avec succès, je veux une autre fonction à traiter, sinon, ne pas traiter cette fonction.besoin de tester si la requête sql a réussi

Voici le code pour exécuter la requête

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

J'imagine que c'est quelque chose comme ...

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

Définir "réussi". Réussi comme dans "couru sans erreur", ou réussi comme dans "trouvé l'enregistrement avec id $ member_id"? –

+1

Vous voudrez peut-être envisager d'utiliser PDO au lieu de mysqli –

+3

@ d03boy Je voudrais partager ce commentaire. Vous ne pouvez pas supposer ce qu'il utilise comme il ne l'a pas mentionné. En outre, il y a eu des discussions sur PDO et MySQLi et ils ont tous les deux leurs avantages. Par conséquent, vous ne pouvez pas simplement dire 'Utiliser PDO sur MySQLi' –

Répondre

22

C'est la façon la plus simple que vous pouvez tester

$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

cela fonctionne-t-il avec Storeprocedures et PDO api pour le php? –

+3

Cela retournera vrai même si 0 ligne est affectée - Il ne retournera que false s'il y avait une erreur dans la requête, donc pour SQL UPDATE je suggérerais, mysql_affected_rows() –

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

requête doit retourner false en cas d'échec (si vous utilisez mysql_query ou mysqli- $> requête). Si vous voulez tester si la requête UPDATE a réellement fait quoi que ce soit (ce qui est tout autre chose que « succès ») puis utilisez mysql_affected_rows ou 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 vous utilisez mysql_query dans le backend (quel que soit $DB->query() utilise pour interroger la base de données), il renverra un TRUE ou FALSE pour INSERT, UPDATE, et DELETE (et quelques autres), commandes, en fonction de leur statut.

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

si la valeur est 0 alors il n'a pas réussi, mais si 1 alors réussi.

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

Cela a prouvé le mécanisme le plus sûr me mettre à l'épreuve de l'échec lors de l'insertion ou de mise à jour:

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

si vous n'êtes pas en utilisant le format ->, vous pouvez le faire:

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