7
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

PHP7で新しいMongoDBのドライバを使う

以前、CentOS6 + PHP5.6の環境下で動かしていたPHPでMongoDBをごにょごにょといじくるスクリプトがあったんですが、CentOS7+PHP7で動かすとエラー
そういやドライバ入ってないじゃんと思ってインストールしようとしたのですが微妙に流儀が変わっていたのでメモ

マニュアルにも

MongoDB ドライバ (旧版)
MongoDB driver

とあるとおり今まであったものは旧版扱い

PHPやドライバのインストール

私はPHP関連はremiリポジトリを使っています
PHP7.0の場合はremi-php70というリポジトリを有効にした上でphp-*なモジュールに関してはphp70-を頭につければいいらしい
ひとまずcliとmongodbとマルチバイトだけの最小構成

sudo yum --enablerepo=remi,remi-php70 install php70-php-cli php70-php-mbstring php70-php-pecl-mongodb

環境変数

これでインストールが終わったのですがシェルからphpと打つと

$ php -v
PHP 5.6.xx (cli) (built: xxxx)
Copyright (c) 1997-2016 The PHP Group
Zend Engine vx.x.x, Copyright (c) 1998-2016 Zend Technologies

予め入れてあったphp5.6が有効に・・・
php7を使うには

$ source /opt/remi/php70/enable

として環境変数を設定してあげなきゃいけないらしい
もう7以外使わないという人は.bashrcあたりに書いておくと幸せかも

ライブラリを入れる

チュートリアルを見ると素のPHPで使う場合はこのライブラリを入れてねという風にお勧めされているので素直にしたがってcomposerでインストールしておく

サンプル

ここまでやってしまえばあとは旧版とほぼ同じOneとManyでメソッドが分かれているのがポイント?

<?php
require_once dirname(__FILE__) . '/vendor/autoload.php';

$client = new MongoDB\Client("mongodb://localhost:27017");
$db = $client->selectDatabase('example');
$collection = $db->selectCollection('gochiusa');


$collection->insertOne([ 'name' => '宇治松千夜', 'shop' => '甘兎庵', 'cv' => '佐藤聡美' ]);
$collection->insertOne([ 'name' => '桐間紗路', 'shop' => 'フルール・ド・ラパン', 'cv' => '内田真礼']);
$collection->insertMany([
    [ 'name' => '保登心愛', 'shop' => 'ラビットハウス', 'cv' => '佐倉綾音' ],
    [ 'name' => '香風智乃', 'shop' => 'ラビットハウス', 'cv' => '水瀬いのり' ],
    [ 'name' => '天々座理世', 'shop' => 'ラビットハウス', 'cv' => '種田梨沙' ],
]);

$chiya = $collection->findOne(['name' => '宇治松千夜']);

$rabbithouse = $collection->find(['shop' => 'ラビットハウス']);
foreach($rabbithouse as $rabbit){
    print_r($rabbit);
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
7
Help us understand the problem. What are the problem?