MongoResultException::getDocument
MongoCursorException::getHost
Exceptions
PHP Manual

# La classe MongoCursorException

(PECL mongo >= 1.0.0)

## Introduction

Émise lors d'un accès incorrect à un curseur ou lors de la réception d'une erreur au moment de la réponse. Notez que cette exception peut être émise par n'importe quelle requête de base de données qui reçoit une réponse, et pas uniquement les requêtes. Les commandes d'écriture, et toutes les autres opérations qui envoient des informations à la base de données et attendent une réponse peuvent émettre une exception de type MongoCursorException. La seule exception à ce principe est new MongoClient() (création d'une nouvelle connexion), qui n'émet que des exceptions de type MongoConnectionException.

Cette exception retourne un message d'erreur spécifique pour aider dans le diagnostique du problème ainsi qu'un code erreur numérique associé avec la cause de l'exception.

Par exemple, supposez que vous tentiez d'insérer 2 documents avec le même _id :

`<?php
try {
$collection->insert(array("_id" => 1), array("w" => 1));
$collection->insert(array("_id" => 1), array("w" => 1));
}
catch (MongoCursorException $e) {
echo "message d'erreur : ".$e->getMessage()."\n";
echo "code de l'erreur : ".$e->getCode()."\n";
}
?>`
Ceci affichera quelque chose comme :

    message d'erreur : E11000 duplicate key error index: foo.bar.$_id_  dup key: { : 1 }
    code de l'erreur : 11000

Notez que le code erreur MongoDB (11000) est utilisé pour le code erreur PHP. Le driver PHP utilise le code erreur natif lorsque c'est possible.

Voici une liste des erreurs, codes et causes survenant le plus fréquemment. Les erreurs exactes sont en italiquue, les erreurs dont le message varie sont décrites en oblique.

- cannot modify cursor after beginning iteration

  Code : 0

  Vous appelez une méthode qui affecte la requête après l'exécuter. Remettez à zéro le curseur et rééssayez.

  Un exemple :

  `<?php
  try {
  $cursor = $collection->find();
  var_dump($cursor->getNext());
  // getNext() requête la base de données, il est trop tard pour définir une limite
  $cursor->limit(1);
  }
  catch (MongoCursorException $e) {
  echo "message d'erreur : ".$e->getMessage()."\n";
  echo "code de l'erreur : ".$e->getCode()."\n";
  }
  // Ceci fonctionnera :
  $cursor->getNext();
  $cursor->reset();
  $cursor->limit(1);
  ?>`

- Get next batch send errors

  Code : 1

  Ne peut envoyer la requête à la base. Vérifiez l'état su serveur et du réseau.

- cursor not found

  Code : 2

  Le pilote a tenté de récupérer plus de données depuis la base, mais celle-ci n'avait pas assez d'enregistrements. Ceci signifie en général que le curseur a expiré coté serveur après quelques minutes d'inactivité, la base va détruire un curseur. (Voyez MongoCursor::immortal() pour plus d'informations).

  Un exemple :

  `<?php
  try {
  $cursor = $collection->find();
  $cursor->getNext();
  // attendre pendant 15 minutes
  sleep(60*15);
  while ($cursor->hasNext()) {
  $cursor->getNext();
  }
  }
  catch (MongoCursorException $e) {
  echo "message d'erreur : ".$e->getMessage()."\n";
  echo "code de l'erreur : ".$e->getCode()."\n";
  }
  ?>`

- cursor->buf.pos is null

  Code : 3

  Ceci peut indiquer que vous n'avez plus de RAM de disponible ou bien d'autres circonstances extraordinaires.

- couldn't get response header

  Code : 4

  Une erreur commune si la base de données ou le réseau n'est plus disponible. Cela signifie que le driver ne peut récupérer une réponse depuis la connexion.

- no db response

  Code : 5

  Ceci n'est pas toujours une erreur, par exemple, la commande "shutdown" émise à la base de données ne retourne aucune réponse. Cependant, si vous attendez une réponse, cela signifie que la base de données n'a pas réussi à la fournir.

- bad response length: %d, did the db assert?

  Code : 6

  Ceci signifie que la base de données dit que sa réponse est inférieure à 0. Cela signifie généralement qu'une erreur réseau ou une corruption de la base de données est survenue.

- incomplete header

  Code : 7

  Très peu commun. Apparait si la réponse de la base commence de manière correcte, mais échoue en plein milieu. Probablement un problème réseau.

- incomplete response

  Code : 8

  Très rare. Survient si la réponse de la base de données a commencé avec succès, mais s'est interrompue avant la fin. Probablement un problème réseau.

- couldn't find a response

  Code : 9

  Si la réponse est en cache mais ne peut être trouvée.

- error getting socket

  Code : 10

  Le socket a été fermé ou a rencontré un problème. Le pilote devrait se reconnecter automatiquement (si possible) lors de l'opération suivante.

- couldn't find reply, please try again

  Code : 11

  Le pilote sauvegarde toutes les réponses de la base qu'il ne peut associer immédiatement à une requête. Cette exception arrive lorsque le pilote a déja passé la réponse à votre requête mais ne peut la trouver dans son cache.

- error getting database response: errstr

  WSA error getting database response: errstr

  "errstr" est une erreur IO, repporté directement depuis le socket C du sous-système. Sous Windows, le message d'erreur est préfixé par "WSA".

- Timeout error

  Code : 13

  Erreur lors de l'attente qu'une requête s'exécute.

- couldn't send query: <various>

  Code : 14

  Erreur de socket C à l'envoi.

- max number of retries exhausted, couldn't send query

  Code : 19

  Le driver retentera automatiquement les requêtes (et non les commandes) un nombre de fois défini si la première tentative échoue pour certaines raisons. Ceci peut produire quelques exceptions lors du jeu de réplication (alors que d'autres passeront normalement), ainsi que quelques erreurs réseaux.

  Ceci peut aussi survenir en raison du driver qui n'arrive pas à se reconnecter à la base de données (si, par exemple, la base de données n'est plus joignable).

  Version 1.2.2+.

## Erreur de la base de données

Les erreurs de la base devraient toujours déclencher une MongoCursorExceptions. Les messages d'erreur et les codes sont envoyés directement depuis la base et devraient se retrouver dans le journal de la base de données.

Voici quelques erreurs classiques de base de données:

- E11000 duplicate key error index: foo.bar.$X dup key: { /* ... */ }

  Code: 11000

  Erreur de clé dupliquée.

- not master

  Codes: 10107, 13435, and 10058

  Erreurs not master, pipée vers la base. Chacune causera une déconnection du pilote et sa recherche d'un nouveau primaire. L'erreur en failover peut ne pas être de type "not master", en fonction du déclenchement du changement de primaire.

## Synopsis de la classe

MongoCursorException extends MongoException {
}

## Sommaire

- MongoCursorException::getHost — Récupère le nom de l'hôte sur lequel une erreur est survenue

MongoResultException::getDocument
MongoCursorException::getHost
Exceptions
PHP Manual