PHP中MongoDB数据库的接连、增加、修改、查询、删

作者:ca88编程

例程:

1,针对mongoDB连接的操作:Mongo

你可能感兴趣的小说:

  • Thinkphp达成MySQL读写分离操作示例
  • 采取PHP完结Mysql读写分离
  • PHP MYSQL达成读写分离容易实战
  • php实现带读写分离功效的MySQL类完整实例
  • thinkphp下MySQL数据库读写分离代码剖判
  • php完成的mysqldb读写分离操作类示例
  • PHP MYSQL达成用户的增加和删除改查
  • PHP连接和操作MySQL数据库基础教程
  • PHP完成的mysql读写分离操作示例

获得八个会面跟慎选数据库拥有同等的语法格式

D:

$db = $mo->dbname;

更详实的应用方法,请参见 db类文件中的注释。 

<?php
//链接
$m = new Mongo();

除去当前DB

$db = $mo->dbname;

复制代码 代码如下:

<?php
echo $collection->count();
?>

剔除二个数据库

其它一种艺术,实例化mongo类,再手动组建连接:

很久未有发帖了,把自家常用的一对php类文件分享出来。
例如您加了新职能,也许是有立异,请与我们一道分享。

我们一样可以收获20 < i <= 30以内的数据

$blog->update(
    array("comments.author" => "John"), 
    array('$set' => array('comments.$.author' => "Jim")));

巡回或的结果记录:

<?php
/*
 *    mysql数据库 DB类
 *    @package    db
 *    @author        yytcpt(无影)
 *    @version    2008-03-27
 *    @copyrigth     
 */
class db {
    var $connection_id = "";
    var $pconnect = 0;
    var $shutdown_queries = array();
    var $queries = array();
    var $query_id = "";
    var $query_count = 0;
    var $record_row = array();
    var $failed = 0;
    var $halt = "";
    var $query_log = array();
    function connect($db_config){
        if ($this->pconnect){
            $this->connection_id = mysql_pconnect($db_config["hostname"], $db_config["username"], $db_config["password"]);
        }else{
            $this->connection_id = mysql_connect($db_config["hostname"], $db_config["username"], $db_config["password"]);
        }
        if ( ! $this->connection_id ){
            $this->halt("Can not connect MySQL Server");
        }
        if ( ! @mysql_select_db($db_config["database"], $this->connection_id) ){
            $this->halt("Can not connect MySQL Database");
        }
        if ($db_config["charset"]) {
            @mysql_unbuffered_query("SET NAMES '".$db_config["charset"]."'");
        }
        return true;
    }
    //发送SQL 查询,并回到结果集
    function query($query_id, $query_type='mysql_query'){
        $this->query_id = $query_type($query_id, $this->connection_id);
        $this->queries[] = $query_id;
        if (! $this->query_id ) {
            $this->halt("查询失利:n$query_id");
        }
        $this->query_count ;
        $this->query_log[] = $str;
        return $this->query_id;
    }
    //发送SQL 查询,并不获取和缓存结果的行
    function query_unbuffered($sql=""){
        return $this->query($sql, 'mysql_unbuffered_query');
    }
    //从结果集中获得一行作为关乎数组
    function fetch_array($sql = ""){
        if ($sql == "") $sql = $this->query_id;
        $this->record_row = @mysql_fetch_array($sql, MYSQL_ASSOC);
        return $this->record_row;
    }
    function shutdown_query($query_id = ""){
        $this->shutdown_queries[] = $query_id;
    }
    //获得结果聚焦央银行的数码,仅对 INSERT,UPDATE 或然 DELETE
    function affected_rows() {
        return @mysql_affected_rows($this->connection_id);
    }
    //猎取结果聚焦央银行的多寡,仅对 SELECT 语句有效
    function num_rows($query_id="") {
        if ($query_id == "") $query_id = $this->query_id;
        return @mysql_num_rows($query_id);
    }
    //再次回到上二个 MySQL 操作中的错误音讯的数字编码
    function get_errno(){
        $this->errno = @mysql_errno($this->connection_id);
        return $this->errno;
    }
    //获得上一步 INSERT 操作爆发的 ID
    function insert_id(){
        return @mysql_insert_id($this->connection_id);
    }
    //得到查询次数
    function query_count() {
        return $this->query_count;
    }
    //释放结果内部存款和储蓄器
    function free_result($query_id=""){
           if ($query_id == "") $query_id = $this->query_id;
        @mysql_free_result($query_id);
    }
    //关闭 MySQL 连接
    function close_db(){
        if ( $this->connection_id ) return @mysql_close( $this->connection_id );
    }
    //列出 MySQL 数据库中的表
    function get_table_names(){
        global $db_config;
        $result = mysql_list_tables($db_config["database"]);
        $num_tables = @mysql_numrows($result);
        for ($i = 0; $i < $num_tables; $i ) {
            $tables[] = mysql_tablename($result, $i);
        }
        mysql_free_result($result);
        return $tables;
       }
    //从结果聚集获得列音信并作为靶子回来,取得富有字段
    function get_result_fields($query_id=""){
           if ($query_id == "") $query_id = $this->query_id;
        while ($field = mysql_fetch_field($query_id)) {
            $fields[] = $field;
        }
        return $fields;
       }
    //错误提醒
    function halt($the_error=""){
        $message = $the_error."<br/>rn";
        $message.= $this->get_errno() . "<br/>rn";
        $sql = "INSERT INTO `db_error`(pagename, errstr, timer) VALUES('".$_SERVER["PHP_SELF"]."', '".addslashes($message)."', ".time().")";
        @mysql_unbuffered_query($sql);
        if (DEBUG==true){
            echo "<html><head><title>MySQL 数据库错误</title>";
            echo "<style type="text/css"><!--.error { font: 11px tahoma, verdana, arial, sans-serif, simsun; }--></style></head>rn";
            echo "<body>rn";
            echo "<blockquote>rn";
            echo "<textarea class="error" rows="15" cols="100" wrap="on" >" . htmlspecialchars($message) . "</textarea>rn";
            echo "</blockquote>rn</body></html>";
            exit;
        }
    }
    function __destruct(){
        $this->shutdown_queries = array();
        $this->close_db();
    }
    function sql_select($tbname, $where="", $limit=0, $fields="*", $orderby="id", $sort="DESC"){
        $sql = "SELECT ".$fields." FROM `".$tbname."` ".($where?" WHERE ".$where:"")." ORDER BY ".$orderby." ".$sort.($limit ? " limit ".$limit:"");
        return $sql;
    }
    function sql_insert($tbname, $row){
        foreach ($row as $key=>$value) {
            $sqlfield .= $key.",";
            $sqlvalue .= "'".$value."',";
        }
        return "INSERT INTO `".$tbname."`(".substr($sqlfield, 0, -1).") VALUES (".substr($sqlvalue, 0, -1).")";
    }
    function sql_update($tbname, $row, $where){
        foreach ($row as $key=>$value) {
            $sqlud .= $key."= '".$value."',";
        }
        return "UPDATE `".$tbname."` SET ".substr($sqlud, 0, -1)." WHERE ".$where;
    }
    function sql_delete($tbname, $where){
        return "DELETE FROM `".$tbname."` WHERE ".$where;
    }
    //新增一条记下
    function row_insert($tbname, $row){
        $sql = $this->sql_insert($tbname, $row);
        return $this->query_unbuffered($sql);
    }
    //更新内定记录
    function row_update($tbname, $row, $where){
        $sql = $this->sql_update($tbname, $row, $where);
        return $this->query_unbuffered($sql);
    }
    //删除满意条件的记录
    function row_delete($tbname, $where){
        $sql = $this->sql_delete($tbname, $where);
        return $this->query_unbuffered($sql);
    }
    /*    依据规范查询,再次回到全部记录
     *    $tbname 表名, $where 查询条件, $limit 再次回到记录, $田野(field)s 再次回到字段
     */
    function row_select($tbname, $where="", $limit=0, $fields="*", $orderby="id", $sort="DESC"){
        $sql = $this->sql_select($tbname, $where, $limit, $fields, $orderby, $sort);
        return $this->row_query($sql);
    }
    //详细显示一条记下
    function row_select_one($tbname, $where, $fields="*", $orderby="id"){
        $sql = $this->sql_select($tbname, $where, 1, $fields, $orderby);
        return $this->row_query_one($sql);
    }
    function row_query($sql){
        $rs     = $this->query($sql);
        $rs_num = $this->num_rows($rs);
        $rows = array();
        for($i=0; $i<$rs_num; $i ){
            $rows[] = $this->fetch_array($rs);
        }
        $this->free_result($rs);
        return $rows;
    }
    function row_query_one($sql){
        $rs     = $this->query($sql);
        $row = $this->fetch_array($rs);
        $this->free_result($rs);
        return $row;
    }
    //计数总括
    function row_count($tbname, $where=""){
        $sql = "SELECT count(id) as row_sum FROM `".$tbname."` ".($where?" WHERE ".$where:"");
        $row = $this->row_query_one($sql);
        return $row["row_sum"];
    }
}
?>

Calvin and Hobbes
XKCD

/** 原字段:
 * {"username" : "...", "password" : "...", "email" : "..."}
 */
$coll->update(array("username" => "joe"), array('$set' => array("twitter" => "@joe4153")));

提及php连mongoDB,不得不先介绍一下php的法定手册,网站在:

复制代码 代码如下:

array(2) {
  ["_id"]=>
  object(MongoId)#6 (0) {
  }
  ["i"]=>
  int(71)
  ["_ns"]=>
  “testCollection”
}

$a = array(’a'=>’b');

safe 是还是不是重临操作结果

<?php
    $db_config["hostname"]    = "127.0.0.1";    //服务器地址
    $db_config["username"]    = "root";        //数据库用户名
    $db_config["password"]    = "root";        //数据库密码
    $db_config["database"]    = "wap_blueidea_com";        //数据库名称
    $db_config["charset"]        = "utf8";
    include('db.php');
    $db    = new db();
    $db->connect($db_config);
    //例:查询表 table_name 中 cid=1的有着记录。
    $row = $db->row_select('table_name', 'cid=1');
?>

复制代码 代码如下:

询问collection获得多条记下(MongoCollection类):

查询collection获得单条记录(MongoCollection类):

复制代码 代码如下:

C:

$coll = $mo->db->foo;

为查询规定几个标准 咱俩得以由此find()方法猎取集结中的文书档案子集,举例,大家要询问出集合中i字段为71的文书档案,我们能够动用下列方法

⑵标准连接

var_dump($v);

为了做一些越来越有意思的作业,大家抬高更加多轻松的文书档案到聚聚集,这几个文书档案如下

$mo = new Mongo();

归来二个分包当前mongo服务上的库(DB)音信的数组。

选拔数据库

            "author" : "Mike",

$c = array(’a'=>1,’s’=>array(’$lt’=>100));

复制代码 代码如下:

MongoCollection::remove(array $criteria,array $options)

一、连接数据库

  

2,针对mongoDB中数据库的操作:MongoDB

复制代码 代码如下:

或者

$mongo = new Mongo("mongodb://username:password@192.168.1.22:12345",array('connect'=>false));//初始化类

图片 1
表标PHP已经自带了mongo成效,你就足以操作上面包车型地铁代码(可是你不可能不有安装mongodb服务器)

列出全部可用数据库  

$db = $mongo->selectDB(’foo’);//获得贰个MongoDB对象

//增加另一个要素,使用不相同的格式
$obj = array( "title" => "XKCD", "online" => true );
$collection->insert($obj);

upsert 是不是未有相称数据就增加一条新的

$dbs = $mo->listDBs();//获得贰个暗含db音讯的数组

复制代码 代码如下:

fsync 是或不是是直接影响到大意硬盘

$coll = $mo->dbname->collname;//获得八个collection对象

这段代码将打字与印刷出101

array $criteria  条件

前段时间你能够使用$connection链接来操作数据库了

    [

取妥贴前数据库名

复制代码 代码如下:

mongo: array('id' => array('$gt' => 1,'$lt' => 10))

fsync 是不是是间接影响到概略硬盘

复制代码 代码如下:

$options = array(’safe’=>true);

$db->drop();

复制代码 代码如下:

mysql: where id <= 10

复制代码 代码如下:

$rs为三个array型的数组,包括操作音讯

复制代码 代码如下:

$mo = new Mongo();

justOne 是不是只影响一条记下

//增加一个因素
$obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

        {

 

<?php
$cursor = $collection->find();
foreach ($cursor as $id => $value) {
    echo “$id: “;
    var_dump( $value );
}
?>

更详尽的调换参考 

$rs = $coll->remove($c,$newobj,$options);

<?php
array( “i” => value );
?>

查询 title为huaibei的字段

upsert 是不是未有相称数据就增加一条新的

这么我们会打字与印刷出集结中的那101个文书档案,$id正是文书档案中的_id字段,$value 正是文书档案自身

$coll = $mo->dbname->collname;//得到三个collection对象

array $criteria  条件

计划叁个文书档案

array MongoCollection::findOne(array $query,array $fields)

foreache($cursor as $k=>$v){

<?php
$doc = array(
 ”name” => “MongoDB”,
    “type” => “database”,
    “count” => 1,
    “info” => (object)array( “x” => 203,
    “y” => 102),
    “versions” => array(“0.9.7″, “0.9.8″, “0.9.9″)
);
?>

$rs为二个array型的数组,包蕴操作音信

$rs = $coll->findOne($query,$fields);

那一个事例显示了什么链接mongodb数据库,怎么着挑选数据库,怎样插入数据,如何查询数据,以及关闭数据库链接

$cursor = $coll->find($query,$fields);

作者们可以透过find()创设四个查询语句以得凑合中的四个子集,比如纵然大家获取全数”i”>50的文书档案,大家得以应用如下代码

mysql: order by name asc

删去当前DB

您只怕感兴趣的篇章:

  • mongoDB 4.0工作回滚的辛酸历程探讨
  • MongoDB各样查询操作详解
  • mongodb中运用distinct去重的简易方法
  • mongodb 增多用户及权限设置详解
  • 1亿条记下的MongoDB数据库随机询问质量测试
  • mongodb 查看数据库和表大小
  • MongoDB下基于数组大小进行查询的艺术
  • Linux系统下MongoDB的简便安装与基本操作
  • MongoDB 语法使用小结
  • mongodb与mysql命令详细相比
  • MongoDB数据库两阶段提交完成业务的章程详解

array $criteria  条件

$cursor->snapshot();

<?php
$query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) );
?>

safe 是或不是重临操作结果

$cursor = $coll->find($query,$fields);

复制代码 代码如下:

也足以参照他事他说加以侦查mongodb官方的科目

array $a 要插入的数组

mongodb 的 insert()、save()  ,不同首若是:若存在主键,insert()  不做操作,而save() 则更动原本的故事情节为新剧情。
留存数量:  { _id : 1, " name " : " n1 " }
insert({ _id : 1, " name " : " n2 " })    会提醒错误
save({ _id : 1, " name " : " n2 " })     会把 n1 改为  n2  。

mongo: array('name','email')

您会晤到下列结果

$db = $mo->dbname;

$rs  =$coll->insert($a,$options);

//重复展现结果
foreach ($cursor as $obj) {
    echo $obj["title"] . "n";
}

$m = new Mongo("mongodb://${username}:${password}@localhost"); 

$mo = new Mongo();

//修改
$newdata = array('$set' => array("title" => "Calvin and Hobbes"));
$collection->update(array("author" => "caleng"), $newdata);
//删除
$collection->remove(array('author'=>'caleng'), array("justOne" => true));

丰裕多个新字段

在 大家做了find()操作,得到$cursor游标之后,那个游标依然动态的,约等于在本人收获游标到自己循环操作完结对应记录的进度中,默许情状下,那对符合条件的笔录假如扩充,结果集也会自行扩大。换句话说,在本身find()之后,到自家的 游标循环实现这段时日,要是再有符合条件的记录被插入到collection,那么那个记录也会被$cursor获得。

?>

参照手册,php官方的 

归来四个游标识录对象MongoCursor。

这里的数据库并不一定是一个已经存在的数据库,假诺所选取的数据库不存在,则会新建多少个数据库,所以在选取数据库的时候,注意早晚要填上科学的数额库名
假定拼写错误的话,很有望会新建三个数据库

var_dump($r);

fsync 是还是不是是直接影响到概略硬盘

选拔游标获得群集中的全数文书档案

$db = $mo->selectDB(’dbname’);

MongoCursor MongoCollection::find(array $query,array $fields)**

那就是说地方的代码就能够替换来

实例:$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin"); 

MongoCollection::insert(array $a,array $options)

<?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert($doc);
?>

**************************************************************************

array $options 选项

多维数组是能够被贮存到数据库中的基本单元
三个随意的文书档案只怕是那般

mongo: array('sort'=>array('name'=>1))

$coll = $mo->db->coll;

<?php
$db = $connection->dbname;
?>

常用的SQL转化为mongodb的条件

safe 是还是不是再次来到操作结果消息

方今我们插入了101个文书档案(大家用循环插入了九二十一个,在此之前还插入了八个),我们得以选拔count()来看看我们的数据是或不是都被插入进去了


例程:

复制代码 代码如下:

<?php   $m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");      //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如                   192.168.0.4:27017,如果端口是27017,端口可以省略  $db = $m -> comedy;             // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy");  $collection = $db->collection;  //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用  $db->selectCollection("collection");  /*********添加一个元素**************/  $obj = array( "title" => "php1", "author" => "Bill Watterson" );  $collection->insert($obj);     //将$obj 添加到$collection 集合中  /*********添加另一个元素**************/  $obj = array( "title" => "huaibei", "online" => true );  $collection->insert($obj);  //$query = array( "title" => "huaibei" );  $query = array( "_id" => $obj['_id'] );  $cursor = $collection->find($query);  foreach ($cursor as $obj) {    //遍历所有集合中的文档  echo $obj["title"] . "n";  echo $obj["_id"] . "n";  }  $m->close();          //断开MongoDB连接  

$newobj = array(’e'=>’f',’x'=>’y');

array(5) {
  ["_id"]=>
  object(MongoId)#6 (0) {
  }
  ["name"]
  string(7) “MongoDB”
  ["type"]=>
  string(8) “database”
  ["count"]=>
  int(1)
  ["info"]=>
  array (2) {
    ["x"]=>
    int(203)
    ["y"]=>
    int(102)
  }
  ["versions"]
  array(3) {
    [0]=>
    string(5) “0.9.7″
    [1]=>
    string(5) “0.9.8″
    [2]=>
    string(5) “0.9.9″
  }
}

mysql: where id = 2 or id = 9

$cursor = $coll->find($query,$fields);

复制代码 代码如下:

插入数据:

详细 不断变化的MongDB结果集

<?php
$query = array( “i” => array( “$gt” => 20, “$lte” => 30 ) );
$cursor = $coll->find( $query );
while( $cursor->hasNext() ) {
    var_dump( $cursor->getNext() );
}
?>

$db->drop();

3,针对mongoDB中collection的操作:MongoCollection

<?php
$db = $connection->baz;//选用数据库
$collection = $db->foobar;//选择foobar集合
//或然应用更简洁的艺术
$collection = $connection->baz->foobar;
?>

本文由ca88发布,转载请注明来源

关键词: ca88网址