2010-03-12 6 views
0

J'ai une instance xampp 1.7.3 en cours d'exécution et un serveur MongoDB 1.2.4 sur la même machine.Connexion de xampp à MongoDB

Je veux les connecter, donc j'ai fondamentalement suivi this tutorial sur php.net, il semble se connecter mais les curseurs sont toujours vides. Je ne sais pas ce qui me manque.

Voici le code que j'essaie. Le curseur-> valide dit toujours faux. grâce

<?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 

Répondre

1

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 l'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 devenez faux. Vous devez encore avancer le curseur à ce point dans votre code.

+0

Eh bien, j'ai essayé cela avant ... mais le code ne passe même pas dans la boucle while –

+0

Hmmm. Dans ce cas, je ne suis pas sûr de ce qui se passe. J'ai édité ma réponse avec un extrait de code qui fonctionne bien pour moi. Pouvez-vous essayer de l'exécuter? Si cela ne fonctionne pas pour vous, il doit y avoir une différence dans nos environnements. –

+0

@Jhonny que voulez-vous dire? Êtes-vous sur Windows? Est-ce que var_dump ($ col-> findOne()) fonctionne? – kristina