سؤال

لدي مثيل Xampp 1.7.3 قيد التشغيل وخادم Mongodb 1.2.4 على نفس الجهاز.

أريد توصيلها، لذلك اتبعت أساسا هذا البرنامج التعليمي على php.net، يبدو أن الاتصال ولكن المؤشرات فارغة دائما. أنا لا أعرف ما أنا في عداد المفقودين.

هنا هو الرمز الذي أحاوله. cursor-> صالح يقول دائما خطأ. شكرا

<?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
هل كانت مفيدة؟

المحلول

عند تكرار نتائج الاستعلام، لا تتقدم المؤشر. يؤدي تشغيل التعليمات البرمجية أعلاه إلى تسبب حلقة لا نهائية منذ عدم توفر المؤشر. حاول تغيير:

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

تحرير ++.

بالمناسبة، لن يعود coursor-> صالح () صحيحا حتى تقدم المؤشر إلى العنصر الأول من النتيجة. هذا هو السبب في أنك تحصل على خطأ. لم تقدم بعد المؤشر في تلك المرحلة في التعليمات البرمجية الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top