2010-03-12 98 views
0

我在同一台机器上运行xampp 1.7.3实例和MongoDB 1.2.4服务器。将xampp连接到MongoDB

我想连接它们,所以我基本上一直跟在php.net上的this tutorial,它似乎连接,但游标总是空的。我不知道我错过了什么。

这是我正在尝试的代码。游标 - >有效始终表示为false。感谢

<?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"].'...'; 
} 

?> 

通过命令行这样完美的作品

use CDO 
db.rep_consulta.find() 
-- lot of data here 

回答

1

迭代时你不前进光标查询的结果。由于游标未被高级化,因此在上面运行代码会导致无限循环。尝试改变:

$item = $cursor->current(); 

$item = $cursor->getNext(); 

就个人而言,我更喜欢这样的语法:

foreach ($cursor as $item) 
{ 
    var_dump($item); 
} 

编辑

下面的代码为我工作的罚款。你可以试试吗?

$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); 
} 

编辑++

顺便说一句,$ CURSOR->有效的(),直到你向前移动光标到结果的第一项将不会返回true。这就是为什么你会得到错误。您尚未在代码中的该点处前进光标。

+0

嗯,我试过之前...但代码甚至没有进入while循环 – 2010-03-13 12:11:13

+0

嗯。在那种情况下,我不确定发生了什么事。我已经编写了一个代码片段,这对我来说工作得很好。你可以尝试运行它吗?如果它不适合你,那么我们的环境必定会有所不同。 – 2010-03-13 12:42:44

+0

@Jhonny你是什么意思?你在Windows上吗? var_dump($ col-> findOne())是否工作? – kristina 2010-03-13 16:36:37