热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP与MongoDB开发基础教程

1.MongoDB的PHP驱动MongoDB在PHP驱动程序是一个PHP扩展,在绝大部分平台下都很容易安装。PHP5.1及以上版本的系统就可以了。首先查看phpinfo()的输出,确定运行的PHP版本和VC版本。这里VC版本可以简单地理解为PHP的编译机制,如果用的是Apache,则需要VC6

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集合是否存在,若不存在该集合,程序会在数据库中自动创建。如下:

            $connection = new Mongo();
          $collection = $connection->test->users;
 ?>

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

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

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

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

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

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

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

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

示例2:

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

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

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

 $profile = array(‘username’ => ‘foobity’,
    ‘pic’ => new MongoBinData(‘百老汇’);
 );

示例3:

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

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

示例4:

输出所有用户的名字:

 $cursor = $collection->find();
 foreach ($cursor as $value)
 {
          echo $value[‘username’] . ‘
’;
 }

或者

 While ($cursor->hasNext())
 {
          $doc = $cursor->getNext();
          echo $doc[‘username’] . ‘’;
 }

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

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

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

示例5:

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

 $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”的文档:

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

示例7:

给users集合中建立索引:

 $collection->ensureIndex(‘username’ => 1);

推荐阅读
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
author-avatar
zcr2016
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有