前回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: