首页 > 解决方案 > MongoDB和PHP连接

问题描述

我正在尝试在Ubuntu 16.04上将 MongoDB 与php5.6一起使用。我有一个创建集合的 php 脚本。当我在我的 Apache Web 服务器上打开脚本时,它显示“连接成功,已创建集合”但是当我登录 mongo 终端并切换到数据库(ecoss)时,我找不到该集合。

sudo apt-get update建立连接:我通过运行安装了mongoDB 扩展sudo apt-get install php5.6-mongo

之后我编辑了我的php.ini文件并添加了扩展名extension=mongo.so;

php-mongo的安装:

在此处输入图像描述

我的 php.ini 文件的提取:

在此处输入图像描述

这是我的 php 脚本create.php

<?php

    // connect to mongodb
    $m = new MongoClient();

    $db = $m->ecoss;    
    echo "Connection successful, Database ecoss selected" . "<br>";

    $collection = $db->createCollection("mycol");
    echo "Collection created succsessfully";

?>

执行上述脚本后,在我的浏览器上输出:

在此处输入图像描述

连接到ecoss数据库并运行命令后在 mongo 终端上输出show collections

在此处输入图像描述

标签: phpmongodb

解决方案


我的问题已经解决了!

通过 php 创建新集合时,将创建该集合。感谢@eselskas,我看到在倾倒时$collection,它返回了 ecoss.mycol问题是连接到数据库ecoss并运行命令后,集合不会出现在 mongo shell 上show collections。这是由于php访问mongo的身份验证问题。

以下是帮助我解决此问题的步骤:

  1. 连接到管理员数据库use admin
  2. 删除管理员数据库db.dropDatabase()
  3. --auth在文件mongod.service 中删除sudo nano /lib/systemd/system/mongod.serviceExecStart行应显示为ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf(删除后--auth
  4. 运行命令sudo systemctl daemon-reloadsudo systemctl restart mongod重新加载服务。

完成上述步骤后,我运行我的create.php脚本,然后登录 mongo 和我的数据库ecoss ,然后show collections我可以清楚地看到我的集合mycol


推荐阅读