2010-03-12 111 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