前回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が使用できるようになります。
早速実験。
インサートのところでありえない渡し方をしていますが、結果どうなるかというと。
・ユーザやパスワードを指定していないのにいきなり接続できた
・CREATE DATABASE testしてないのにいきなりtestデータベースを取得できた
・CREATE TABLE collect_testしてないのにいきなりcollect_testテーブルにインサートできた
・型が違うデータを同じ列に挿入できた
・それどころかレコード毎に列が合っていないでーたも同じテーブルに挿入できる
なんなんだこれは。
今までのRDBMSの常識が全く通用しません。
使用上の注意点といえば、やはりCREATE TABLE文などがない点でしょうか。
これによって任意のデータを登録しやすくなったかわりに、後先考えずに使っていると半端なくカオスなデータベースになってしまいそうです。
実際上で作ったcollect_testテーブルは、早くも使い物にならなそうな構造になっています。
NoSQLを使うにあたってはRDBMS以上の自制が必要になりそうな気がしないでもない。
で、これアクセス制御とかどうすればいいんですかね?
まず必要なのは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
トラックバック
トラックバックURL: