2012-02-06 55 views
0

我有點卡在集合更新。

所以,我有這個疑問:

$coll->update(
      array("_id" => new MongoId($_POST["id"])), 
      array("$set" => array(
       "contentType" => htmlspecialchars(strip_tags(trim($_POST["type"]))), 
       "contentTitle" => htmlspecialchars(strip_tags(trim($_POST["title"]))), 
       "contentBody" => htmlspecialchars(strip_tags(trim($_POST["content"]))) 
      )), 
      true, 
      false 
     ); 

請不要驗證$ _ POST的方式打擾,這只是一個測試,但它不工作。收集是好的,我已經檢查過。它什麼都不做,當我插入 var_dump($db->lastError()); 它根本不會給我帶來任何錯誤。

+0

您是否將查詢設置爲在安全模式下運行?如果FALSE(默認),程序將繼續執行而不等待數據庫響應。如果爲TRUE,程序將等待數據庫響應並在更新未成功時拋出MongoCursorException。這可能是爲什麼你最後的錯誤沒有返回任何東西。 http://us.php.net/manual/en/mongocollection.update.php – 2012-02-06 15:53:08

+0

問題是我沒有得到bac任何期望... – benqus 2012-02-06 16:06:58

+0

這是什麼? - >星期一2月6日17:06:49偏移量爲127的畸形UTF-8字符序列 – benqus 2012-02-06 16:07:51

回答

0

好的,我現在已經有了解決方案。

$r = $coll->findOne(
      array(
       "_id" => new MongoId($_POST["id"]) 
      ) 
     ); 
     // 
     $r["contentType"] = htmlspecialchars(strip_tags(trim($_POST["type"]))); 
     $r["contentTitle"] = htmlspecialchars(strip_tags(trim($_POST["title"]))); 
     $r["contentBody"] = htmlspecialchars(strip_tags(trim($_POST["content"]))); 
     // 
     $coll->save($r); 

所以這個工作正常。不過,我非常想知道以前的事情... = P 如果有人知道它爲什麼不工作,隨時回答! =]

+0

你嘗試過傳遞fsync = true? – 2012-02-06 16:43:53

+0

你的意思是我應該試試這個? $ coll->更新( \t陣列( 「_ ID」=>新MongoId($ _ POST [ 「ID」])), \t陣列( 「$組」=>數組( \t \t 「的contentType」=>用htmlspecialchars(用strip_tags(修剪($ _ POST [ 「型」]))), \t \t 「contentTitle」=>用htmlspecialchars(用strip_tags(修剪($ _ POST [ 「標題」]))), \t \t 「contentBody」=>用htmlspecialchars(用strip_tags(修剪($ _ POST [ 「內容」]))) \t)), \t陣列( 「更新插入」=>假), \t陣列( 「FSYNC」=>真), \t array(「safe」=> true) ); – benqus 2012-02-07 11:31:56

+0

數組(「upsert」=> false,「fsync」=> true,「safe」=> true)更適合我認爲的最後一個參數 – 2012-02-07 12:51:55

0

檢查你的Apache日誌可能有任何幫助。基於update的第三個參數是一個數組。你可能想要堅持。

+0

不,在這臺機器上沒有apache ...這是一個只適用於MongoDB的虛擬機...該網絡服務器在不同的虛擬機上......只有這個更新的sh * t不起作用(還)。 我甚至檢查過var/log/mongo/mongod.log,沒有什麼不尋常的...... 當我給一個數組(「upsert」=> true)而不是最後的真和假參數時,整個腳本退出的更新... – benqus 2012-02-06 15:40:21

+0

你檢查過使用mongodb和pecl擴展的版本嗎?可能有一些問題。你也可以設置你的錯誤處理爲'E_ALL' – 2012-02-06 15:45:36

+0

,我正在使用MongoDB v2.0.2,我不知道這是否應該很重要... – benqus 2012-02-06 15:45:39