热门技术教程

面向PHP开发人员的CouchDB基础知识(3)


次阅读 | 2011-09-27 | 标签:

很不错,但是如何对一个文档进行更新呢?可以做的更新有两种:更改现有字段值;添加新字段和新值。对于后者,可以使用箭头表示法(比如 $doc->new_field),然后通过 storeDoc() 保存更改。清单 7 显示了更新一个文档所需的代码。


清单 7. 更新一个文档
 

$doc->genre = 'hip-hop'; $doc->year = 2008; try { $response = $client->storeDoc($doc); } catch (Exception $e) { echo "Error: ".$e->getMessage()." (errcode=".$e->getCode().")\n"; exit(1); }

运行此代码,然后就可以检索这个文档 ID 并获得清单 8 内所示的结果。


清单 8. 更新后的文档
 

stdClass Object ( [_id] => whatever_you_like [_rev] => 2-12513a362693b300928aa45f82faed83 [title] => Whatever You Like [artist] => T.I. [album] => Paper Trail [genre] => hip-hop [year] => 2008 )

注意到 _rev 属性已经从之前的 1-whatever 增加为 2-whatever。借此,就可以很容易地判断已经发生了更改。

那么,该如何在数据库内存储一个新文档呢?您可以实例化一个新对象并使用箭头表示法来填充文档内的字段。清单 9 显示了所需代码。


清单 9. 创建一个新文档
 

$song = new stdClass(); $song->_id = "in_the_meantime"; $song->title = "In the Meantime"; $song->album = "Resident Alien"; $song->artist = "Space Hog"; $song->genre = "Alternative"; $song->year = 1995; try { $response = $client->storeDoc($song); } catch (Exception $e) { echo "Error: ".$e->getMessage()." (errcode=".$e->getCode().")\n"; exit(1); } print_r($response);

结果应该类似清单 10。

stdClass Object ( [ok] => 1 [id] => in_the_meantime [rev] => 1-d65b03a9fe2f3c8095b08883e7cd97df )


上一篇:使用参数化查询防止SQL注入漏洞    下一篇:未来5年程序员应当具备的十项技能