2012-02-06 53 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