> 백엔드 개발 > PHP 튜토리얼 > 数据库 - PHP读写MongoDB,shell读写MongoDB,兵分两路操作,怎么数据还是相互隔离的?

数据库 - PHP读写MongoDB,shell读写MongoDB,兵分两路操作,怎么数据还是相互隔离的?

WBOY
풀어 주다: 2016-06-06 20:47:22
원래의
1109명이 탐색했습니다.

首先启动mongod服务器;
打开一个shell客户端:

use haha
db.haha.insert({'a':'aaa'})
db.haha.find()
{'a':'aaa'} // 添加成功了

打开另一个shell客户端:

use haha
db.haha.find() // 确认一下刚才的输入
{'a':'aaa'} // 果然有效

可以看到,shell客户端里是有效果的。
下面是php代码:

$m = new MongoClient();
$jihe = $m->db->haha;

$cursor = $jihe->find();
foreach($cursor as $item){
var_dump($item); //什么都没有,空数据
}

然后修改php代码为:

$m = new MongoClient();
$jihe = $m->db->haha;

$doc = array('b'=>'bbb');
$jihe->insert($doc); // php自己试着插入数据

$cursor = $jihe->find();
foreach($cursor as $item){
var_dump($item); //这次仅有 {'b':'bbb'}数据,没有shell里面设置的{'a':'aaa'}
}

这是怎么回事呢?都是针对同一个数据库发起的操作啊。shell客户端和php访问,怎么有如此差异?

回复内容:

首先启动mongod服务器;
打开一个shell客户端:

use haha
db.haha.insert({'a':'aaa'})
db.haha.find()
{'a':'aaa'} // 添加成功了

打开另一个shell客户端:

use haha
db.haha.find() // 确认一下刚才的输入
{'a':'aaa'} // 果然有效

可以看到,shell客户端里是有效果的。
下面是php代码:

$m = new MongoClient();
$jihe = $m->db->haha;

$cursor = $jihe->find();
foreach($cursor as $item){
var_dump($item); //什么都没有,空数据
}

然后修改php代码为:

$m = new MongoClient();
$jihe = $m->db->haha;

$doc = array('b'=>'bbb');
$jihe->insert($doc); // php自己试着插入数据

$cursor = $jihe->find();
foreach($cursor as $item){
var_dump($item); //这次仅有 {'b':'bbb'}数据,没有shell里面设置的{'a':'aaa'}
}

这是怎么回事呢?都是针对同一个数据库发起的操作啊。shell客户端和php访问,怎么有如此差异?

推测:shell连的是haha,php连的是db,这是2个数据库空间。
打开一个shell客户端,输入命令

<code>show dbs
</code>
로그인 후 복사

输出结果除了haha,是不是还有一个db?如果是Yes

<code>$jihe = $m->db->haha;
</code>
로그인 후 복사

应该改为

<code>$jihe = $m->haha->haha;
</code>
로그인 후 복사

如果是No,(摊手)php多年没碰了。

确认你连的是同一个服务器,同一个数据库

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿