• MongoDB与PHP的简单应用


    1. MongoDB的PHP驱动

    MongoDB在PHP驱动程序是一个PHP扩展,在绝大部分平台下都很容易安装。PHP5.1及以上版本的系统就可以了。

    首先查看phpinfo()的输出,确定运行的PHP版本和VC版本。这里VC版本可以简单地理解为PHP的编译机制,如果用的是Apache,则需要VC6,否则需要VC9,例如IIS。有些Zend用的VC8。还要注意是否是线程安全的(Thread Safety),对应到PHP的驱动包名中缩写为“ts”。同时要明确extension_dir的值,所有的扩展组件都放在这里。

    2. 在Windows下安装PHP的MongoDB扩展

    到官网下载和PHP版本、VC版本和线程安全相匹配的包,解压后,将php_mongo.dll移动到extension_dir目录。

    如果启动了应用服务器(Apache、WAMPP等),需要重启,下次启动PHP时会自动加载Mongo扩展。

    3. PHP驱动程序的简单示例

    Mongo类就是一个到数据库的连接。默认情况下,构造器尝试连接本地默认端口处运行的数据库服务器。MongoDB中的文档用PHP中的关联数组表示,{“foo” : “bar”}对应PHP中的array(“foo” => “bar”)。MongoDB中的数组对应表示为PHP中的数组,[“foo”, “bar”, “baz”]对于PHP中的array(“foo”, “bar”, “baz”)。对于null、布尔型、数字型、字符串和数组,PHP驱动使用了PHP的本机类型。对于其他类型,可参看手册。

    示例1:

    获取数据库test的users集合,不用担心users集合是否存在,若不存在该集合,程序会在数据库中自动创建。如下:

    1 <?php
    2 
    3          $connection = new Mongo();
    4 
    5          $collection = $connection->test->users;
    6 
    7 ?>

    当然还可以继续访问子集合,例如获取users.addresses集合:

    1 $collection = $connection->users->addresses;

    注意:这里创建MongoDB的连接时,new Mongo()中没有传任何参数,那么默认连接到localhost:27017的MongoDB服务器上。如果要创建到某个主机的某个端口的连接,可以编写如下代码:

    1 $connection = new Mongo(‘example.com’);    //连接到example.com:27017
    2 $connection = new Mongo(‘example.com:65432‘);          //连接到example.com:65432

    有人会有疑问,如果MongoDB是以安全认证的机制运行的,那么怎么连接服务器呢?可以通过传入用户名和密码获取连接:

    1 $connection = new Mongo(‘cx:123456@example:65432/test’);

    有人又会注意到多出了“test”,这是所传入的用户名和密码对应的数据库。如果不指明用所传的用户名和密码去哪个数据库去验证,那么默认为admin数据库。

    关于Mongo类构造函数的参数还有许多,可以参考PHP开发手册。

    示例2:

    向users集合中插入一个文档:

    1 $user = array(“username” => “cx”, “age” => 23);
    2 
    3 $collection->insert($user);

    注意:MongoDB数据库只接受utf-8编码的数据,否则插入数据时会报错。假如我们插入的文档中的键值包含中文字符,在插入之前,需要将中文字符转换成utf-8编码。还有一种解决办法,就是使用MongoBinData类。用非utf-8编码的字符串来实例化MongoBinData类,然后将这个类当作值赋给某个键。例如:

    1 $profile = array(‘username’ => ‘foobity’,
    2 
    3    ‘pic’ => new MongoBinData(‘百老汇’);
    4 
    5 );

    示例3:

    输出users集合中第一个文档的id号:

    1 $user = $collection->findOne();
    2 
    3 echo $user[‘_id’];

    示例4:

    输出所有用户的名字:

    1 $cursor = $collection->find();
    2 
    3 foreach ($cursor as $value)
    4 
    5 {
    6 
    7          echo $value[‘username’] . ‘<br/>’;
    8 
    9 }

    或者

    1 While ($cursor->hasNext())
    2 
    3 {
    4 
    5          $doc = $cursor->getNext();
    6 
    7          echo $doc[‘username’] . ‘<br />’;
    8 
    9 }

    如果想对查询的结果按用户名进行升序排序,如下:

    1 $cursor->sort(array(‘username’ => 1));

    注意:由于MongoDB文档的结构很灵活,所以这种情况要确保每个文档都包含这个“username”键。

    示例5:

    修改users集合中用户名为“lucy”的用户的年龄为20:

    1 $collection->update(array(‘username’ => ‘lucy’), array(‘$set’ : array(‘age’ : 20)));

    注意:“$set”修改器,MonoDB默认字符是“$”,但PHP中“$”表示变量前缀,所以可以通过用单引号使用“$set”修改器,或者在双引号中转义,如”\$set”,再或者在php.ini文件中设置mongo.cmd_char = “…”,用任何你觉得可以代替$的字符都可以。

    这里还可以用save()方法来更新数据。save()方法传入的参数是要修改的文档,如果该文档在集合中已经存在(判断该文档是否含有“_id”键),那么执行更新操作,否则执行插入操作。

    示例6:

    删除users集合中的用户名为“lucy”的文档:

    1 $collection->remove(array(‘username’ => ‘lucy’));

    示例7:

    给users集合中建立索引:

    1 $collection->ensureIndex(‘username’ => 1);
  • 相关阅读:
    我是如何用三小时搞出个赚钱产品的?
    搭建一个基于nuxt.js的项目
    栅格系统
    git使用
    通过JS获取屏幕高度,借助屏幕高度设置div的高度
    如何理解盒模型
    e.target.value 和 this 的区别
    组件化设计:弹窗的使用逻辑
    uni-app 入坑记
    MAC 系统快捷键
  • 原文地址:https://www.cnblogs.com/balanar/p/2908993.html
Copyright © 2020-2023  润新知