php mongodb 3.2,使用 thinkphp 3.2.3 連接 mongodb 數據庫

一如既往的搜了超級多的教程,又一如既往的大同小異,終於被我連接上了

aHR0cDovL3N0YXRpYy5ibG9nLmNzZG4ubmV0L3hoZWRpdG9yL3hoZWRpdG9yX2Vtb3QvZGVmYXVsdC9hbmdyeS5naWY=

首先很多教程都只講了兩個文件,一個是控制器,一個是配置文件,就算有講模型類的也是說不用修改太多的,其實模型類才是關鍵,首先先列出幾個我遇到的問題

第一個:Call to a member function selectCollection() on null

95ae06640ef87d38fecc79abb33c3b93.png

第二個:無法加載數據庫驅動:Think\Db\Driver\Mongodb

8d0566adbb11b2b7ac9f46cb35211c5f.png

第三個:Failed to connect to:127.0.0.1:27017:SASL Authentication failed on database 'test':Authentication failed

8c779d321e3b74099708adce920adfb3.png

第四個:127.0.0.1:27017:not authorized for query on system.users

f529495a1bcf9145ad70267a229e0a0e.png

第一個問題是由於沒有傳入集合名,即使你以為自己傳入了,通過在對應的模型類下設置參數就行了 protected $tableName        =   'admin1';

第二個問題是由於配置時將 mongo 寫成了 mongodb,

第三個是沒有選擇 admin 表進行登錄,

第四個是你登錄時操作的表超過了你登錄所用帳號的權限

其次再來講以下我失敗的例子

我首先在模塊下的 config.php 中配置了數據庫的配置參數

'DB_TYPE'               =>  'mongo',     // 數據庫類型

'DB_HOST'               =>  '127.0.0.1', // 服務器地址

'DB_NAME'               =>  'admin',          // 數據庫名

'DB_USER'               =>  'trouble i am in',      // 用戶名

'DB_PWD'                =>  'trouble i am in',          // 密碼

'DB_PORT'               =>  '27017',        // 端口

(把'DB_TYPE'               =>  'mongo',     設置成 'DB_TYPE'               =>  'mongodb',     就會出現上面的第二類問題)

但是這樣配置完了之后問題就來了,我上面登錄的是 admin 數據庫,但是我實際上操作的又是 test 的表,如果上面修改成 test 的表,就會出現上面的第三類錯誤,而在成功登錄 admin 數據庫后,我再使用 thinkphp 的 db() 重新連接別的數據庫

aHR0cDovL3N0YXRpYy5ibG9nLmNzZG4ubmV0L3hoZWRpdG9yL3hoZWRpdG9yX2Vtb3QvZGVmYXVsdC9mYXN0Y3J5LmdpZg==多轉幾圈之后腦子就昏了,而且我也沒有成功過。

所以為了解決上面的問題,直接拋棄配置文件,在模型類中設置相應數據庫的信息

第一步,模型文件

namespace Home\Model\MongoDB;

use Think\Model\MongoModel;

class Admin1MongoModel extends MongoModel{

//使用下面這句話進行數據庫的連接,其中的各個位置的含義,注意后面一定要是 admin

protected $tableName        =   'admin1'; //在這里指定要操作的表

protected $dbName           =   'test';//這里指定數據庫的名字

}

?>

在模型文件中定義好這些參量之后一定要配置文件里面的內容去掉,否則還是以配置文件為主的

第二步,在控制器中測試連接是否成功

namespace Home\Controller;

use Think\Controller;

use Home\Model\MongoDB\Admin1MongoModel;

class IndexController extends Controller {

public function index() {

$mondel = new Admin1MongoModel("admin1");

//這里傳不傳如表名都沒關系

$message = $mondel->find();

//簡單的查詢一個數據

var_dump($message);

}

}

如果你的用戶名和密碼正確,權限足夠,那么就可以查詢到你的數據

b475412423240da23aa7e50dfc62fd44.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值