Domanda
Ho un XAMPP 1.7.3 un'istanza in esecuzione e un server MongoDB 1.2.4 sulla stessa macchina.
Voglio collegare loro, così ho praticamente ho seguito questo tutorial su php.net, sembra collegare ma i cursori sono sempre vuota. Non so che cosa mi manca.
Ecco il codice che sto cercando. Il cursor-> valida dice sempre false. grazie
<?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"].'...';
}
?>
In questo modo da riga di comando funziona perfetto
use CDO
db.rep_consulta.find()
-- lot of data here
Soluzione
Quando l'iterazione i risultati della query non si sta avanzando il cursore. Il funzionamento del vostro codice di cui sopra sta causando un ciclo infinito in quanto il cursore non viene avanzata. Prova a cambiare:
$item = $cursor->current();
a
$item = $cursor->getNext();
Personalmente, preferisco questa sintassi:
foreach ($cursor as $item)
{
var_dump($item);
}
Modifica
Il seguente codice sta lavorando bene per me. Puoi provarlo?
$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);
}
Modifica ++
A proposito, $ cursor-> valido () non restituirà vero fino a quando si passa il cursore sulla prima voce del risultato. Ecco perché si stanno ottenendo falso. Bisogna tuttavia per far avanzare il cursore in quel punto nel codice.