2008-11-26 13 views
1

Je suis nouveau à mysqli, et en essayant de confirmer que si je quelque chose comme ci-dessous, le errno sera mis à la dernière erreur, le cas échéant, et non l'erreur de la dernière requête.mysqli-> erreur: est-ce seulement pour la dernière requête, ou pour la dernière erreur du groupe de requête?

Est-ce une pratique correcte ou dois-je vérifier l'erreur entre chaque requête?

Merci!

$mysqli->autocommit(FALSE); 

$mysqli->query("INSERT INTO ....."); 
$mysqli->query("INSERT INTO ....."); 
$mysqli->query("INSERT INTO ....."); 
$mysqli->query("INSERT INTO ....."); 
$mysqli->query("INSERT INTO ....."); 

if (0==$mysqli->errno) { 
    $mysqli->commit(); 
} else { 
    $mysqli->rollback(); 
    // Handle error 
} 

Répondre

3

mysqli_errno - Retourne le code d'erreur pour la fonction dernier appel.

4

Non - il signale le code d'erreur du dernier appel de fonction mysqli. Zéro signifie qu'aucune erreur ne s'est produite lors du dernier appel de fonction. Donc, si l'un au milieu échoue, vous ne le saurez pas en vérifiant seulement à la fin. En d'autres termes, oui, vous devez vérifier le code d'erreur après chaque appel de fonction. Notez qu'une erreur est également indiquée par la valeur de retour de $mysqli->query(). Pour paraphraser l'exemple de la mysqli_errno doc:

if (!$mysqli->query("INSERT ...")) { 
    printf("Errorcode: %d\n", $mysqli->errno); 
} 
1

Non, vous devez vous enregistrer entre chaque requête car il vous donnera toujours une erreur pour la dernière requête seulement ... Donc, si votre première requête a échoué et dernière exécution correctement, vous ne recevrez pas d'erreur ... donc vérifiez après tout requête un par un pas enfin ...

1

OMI la meilleure façon et la plus facile d'attraper toutes les erreurs est d'étendre la classe mysqli:

class DBException extends Exception { 
} 
class DBConnectException extends DBException { 
} 
class DBQueryException extends DBException { 
} 

class DB extends MySQLi { 
    private static $instance = null; 

    private function __construct() { 
     parent::__construct('host', 
          'username', 
          'passwd', 
          'dbname'); 

     if ($this->connect_errno) { 
      throw new DBConnectException($this->connect_error, $this->connect_errno); 
     } 
    } 

    private function __destructor() { 
     parent::close(); 
    } 

    private function __clone() { 
    } 

    public static function getInstance() { 
     if (self::$instance == null) { 
      self::$instance = new self(); 
     } 
     return self::$instance; 
    } 

    public function query($query, $resultmode = MYSQLI_STORE_RESULT) { 
     $result = parent::query($query, $resultmode); 
     if (!$result) { 
      // or do whatever you wanna do when an error occurs 
      throw new DBQueryException($this->error, $this->errno); 
     } 
     return $result; 
    } 
} 
Questions connexes