忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/25 22:32 |
PHP5.3 PHPからMongoDBを使う
前回MongoDBをインストールしましたので、次はPHPから利用してみます。
まず必要なのはphpinfo()。

見るのはPHPのバージョンとCompiler欄。

何に使うかってインストールに必要です。
http://jp2.php.net/manual/ja/mongo.installation.php#mongo.installation.windows
何故かやたら細かくバージョンが分かれてるんですよね。

https://github.com/mongodb/mongo-php-driver/downloads
Gitから執筆時点での最新版、mongo-1.1.4.zipをダウンロードしました。
解凍するとバージョンがいっぱい出てきますが、手元のCompilerは「MSVC6 (Visual C++ 6.0)」となっていたので、「mongo-1.1.4-php5.3vc6ts」を選択しました。
中にあるphp_mongo.dllをエクステンションディレクトリにコピー。

次にphp.iniを編集。
extension=php_mongo.dll
って追加するだけです。

最後にApacheを再起動。

これだけでMongoDBが使用できるようになります。

早速実験。
<?php
	//接続
		//Mongo
		$mongo = new Mongo();
		//データベース
		$db = $mongo->selectDB("test");
		//コレクション
		$collection = $db->selectCollection("collect_test");
	
	//インサート
		$collection->insert(array('a'=>'hoge', 'b'=>'fuga'));
		$collection->insert(array('a'=>1, 'c'=>array('foo','bar','baz')));
	
	//セレクト
		$cursol = $collection->find();
		foreach($cursol as $key=>$val){
			var_dump( $val );
		}
コレクションはRDBMSでいうところのテーブルみたいです。
インサートのところでありえない渡し方をしていますが、結果どうなるかというと。
array(3) {
  ["_id"]=>
  object(MongoId)#7 (1) {
    ["$id"]=>
    string(24) "4e0401a5488316e413000004"
  }
  ["a"]=>
  string(4) "hoge"
  ["b"]=>
  string(4) "fuga"
}

array(3) {
  ["_id"]=>
  object(MongoId)#8 (1) {
    ["$id"]=>
    string(24) "4e0401a5488316e413000005"
  }
  ["a"]=>
  int(1)
  ["c"]=>
  array(3) {
    [0]=>
    string(3) "foo"
    [1]=>
    string(3) "bar"
    [2]=>
    string(3) "baz"
  }
}
普通に取得できました。

・ユーザやパスワードを指定していないのにいきなり接続できた
・CREATE DATABASE testしてないのにいきなりtestデータベースを取得できた
・CREATE TABLE collect_testしてないのにいきなりcollect_testテーブルにインサートできた
・型が違うデータを同じ列に挿入できた
・それどころかレコード毎に列が合っていないでーたも同じテーブルに挿入できる

なんなんだこれは。
今までのRDBMSの常識が全く通用しません。


使用上の注意点といえば、やはりCREATE TABLE文などがない点でしょうか。
これによって任意のデータを登録しやすくなったかわりに、後先考えずに使っていると半端なくカオスなデータベースになってしまいそうです。
実際上で作ったcollect_testテーブルは、早くも使い物にならなそうな構造になっています。
NoSQLを使うにあたってはRDBMS以上の自制が必要になりそうな気がしないでもない。


で、これアクセス制御とかどうすればいいんですかね?
PR


2011/07/11 20:43 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.3 Services_JSONで数値をデコード | HOME | 買ったものリスト 2011/07/10>>
忍者ブログ[PR]