Question
J'ai un xampp 1.7.3 instance d'exécution et un serveur MongoDB 1.2.4 sur la même machine.
Je veux les connecter, donc j'ai été essentiellement ce tutoriel sur php.net, il semble se connecter, mais les curseurs sont toujours vides. Je ne sais pas ce que je manque.
Voici le code que je suis en train. Le cursor-> valide dit toujours faux. merci
<?php
$m = new Mongo(); // connect
try {
$m->connect();
} catch (MongoConnectionException $ex) {
echo $ex;
}
echo "conecta...";
$dbs = $m->listDBs();
if ($dbs == NULL) {
echo $m->lastError();
return;
}
foreach($dbs as $db) {
echo $db;
}
$db = $m->selectDB("CDO");
echo "elige bd...";
$col = $db->selectCollection("rep_consulta");
echo "elige col...";
$rangeQuery = array('id' => array( '$gt' => 100));
$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));
$cursor = $col->find()->limit(10);
echo "buscando...";
var_dump($cursor);
var_dump($cursor->valid());
if ($cursor == NULL) echo 'cursor null';
while($cursor->hasNext()) {
$item = $cursor->current();
echo "en while...";
echo $item["nombre"].'...';
}
?>
le faire en ligne de commande fonctionne parfaitement
use CDO
db.rep_consulta.find()
-- lot of data here
La solution
Lorsque les résultats itérer de la requête que vous n'êtes pas faire avancer le curseur. L'exécution de votre code ci-dessus provoque une boucle infinie puisque le curseur n'est pas avancé. Essayez de changer:
$item = $cursor->current();
à
$item = $cursor->getNext();
Personnellement, je préfère cette syntaxe:
foreach ($cursor as $item)
{
var_dump($item);
}
Modifier
Le code suivant fonctionne très bien pour moi. Pouvez-vous essayer?
$m = new Mongo();
$db = $m->CDO;
$col = $db->rep_consulta;
$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));
$cursor = $col->find()->limit(10);
foreach ($cursor as $item)
{
var_dump($item);
}
Modifier ++
Par ailleurs, $ cursor-> valide () ne retournera pas vrai jusqu'à ce que vous avancez le curseur sur le premier élément du résultat. C'est pourquoi vous obtenez faux. Vous avez encore pour faire avancer le curseur à ce point dans votre code.