Æí¸®ÇÑ È£½ºÆà ¹Ì¼ÒIDC

   
 
 
 

      1Â÷ ³×ÀÓ¼­¹ö :
      ns1.misoidc.com
      101.79.73.101

      2Â÷ ³×ÀÓ¼­¹ö :
      ns2.misoidc.com
      101.79.73.105

      ¾îÁ¦ : 523 ,¿À´Ã : 287
      Àüü : 1,225,571


     

 

 
ÀÛ¼ºÀÏ : 12-07-27 16:14
PHP ¿Í MongoDB »ç¿ë¹ý
 ±Û¾´ÀÌ : ½ÑÀ¥È£½ºÆÃ
Á¶È¸ : 175,219  
Yet another MongoDB and PHP tutorial, say it ain¡¯t so! Well yes, but this tutorial aims to be more complete than the others out there. OK I¡¯m going to assume you know what MongoDB is, so I¡¯m not going to go over ¡°what mongoDB is¡± or ¡°what NoSQL is¡±. I¡¯m going to do this series in a little different styling than my other tutorial series have been, so let just jump right in.

Here¡¯s a couple links to get you up to speed:
Installing Mongo
MongoDB PHP Extension

If you have issues with MongoD not starting – something about ¡°/data/db¡± missing, then you should create the directory. In *Nix: ¡°mkdir /data/db¡±, in Win ¡°mkdir c:data¡± then ¡°mkdir c:datadb¡±.

Connecting
MySQL

[php]
<?php
$host = ¡®localhost¡¯;
$user = ¡®root¡¯;
$pass = ¡°¡±;
$link = mysql_connect($host, $user, $pass, 1) or die(¡°Could not connect to: {$host}. Check your settings and try again.¡±);
[/php]

MongoDB

[php]
<?php
try
{
$link = new Mongo();
}
catch(MongoConnectionException $e)
{
die(¡®Could not connect. Check to make sure MongoDB is running.¡¯);
}
[/php]

As you can see, Mongo DB automatically will connect to the local host and default port. Yes, MySQL will do the same if you have the directives in your ¡°php.ini¡± setup to do this. IE. ¡°mysql.default_host¡±, ¡°mysql.default_user¡± and ¡°mysql.default_password¡±. You might notice that by default MongoDB doesn¡¯t have a user name or password setup. I will go over how to set that up in part 2.

Creating and using a DB
MySQL

[php]$db = ¡®testdb¡¯;
$sql = ¡°CREATE DATABASE `$db`¡±;

mysql_query($sql, $link);
mysql_select_db($db, $link);
[/php]

MongoDB

[php]$db = $link->testdb;
[/php]

In one line of code, MongoDB will create a DB automatically if it doesn¡¯t already exists and select (use) it.

Create a Table / Collection
MySQL

[php]
// Create the Table
$tbl = ¡®user¡¯;
$sql = ¡°CREATE TABLE `$tbl` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `login` VARCHAR (24)NOT NULL, `password` CHAR(32) NOT NULL, `email` VARCHAR(255)) TYPE=innodb;¡±;
mysql_query($sql, $link);
[/php]

MongoDB

[php]
// Create the collection (AKA Table)
$col = $db->user;
[/php]

Once again, MongoDB will automatically create something for us if it doesn¡¯t exist. In this example, it create our ¡°user¡± table. You might notice we didn¡¯t define how the table is formatted, this is because MongoDB is schema-less and doesn¡¯t need column definitions. ¡°Tables¡± in MongoDB are called ¡°collections¡±.

Insert Data
MySQL

[php]
// Insert a row into the table
$sql = ¡°INSERT INTO `$tbl` SET `login` = ¡®jsmith¡¯, `password` = ¡¯5f4dcc3b5aa765d61d8327deb882cf99¡Ç, `email` = ¡®
jsmith@example.com¡¯¡±;
mysql_query($sql);

$sql = ¡°INSERT INTO `$tbl` SET `login` = ¡®psmith¡¯, `password` = ¡¯5f4dcc3b5aa765d61d8327deb882cf99¡Ç, `email` = ¡®
psmith@example.com¡¯¡±;
mysql_query($sql);

// Get the ID of last insert
$id = mysql_insert_id($link);
[/php]

MongoDB

[php]
// Insert a document (row) into the collection (table)
$doc = array(¡®login¡¯ => ¡®jsmith¡¯, ¡®password¡¯ => ¡® 5f4dcc3b5aa765d61d8327deb882cf99¡Ç, ¡®email¡¯ => ¡®
jsmith@example.com¡¯);
$col->insert($doc, true);

$doc = array(¡®login¡¯ => ¡®psmith¡¯, ¡®password¡¯ => ¡® 5f4dcc3b5aa765d61d8327deb882cf99¡Ç, ¡®email¡¯ => ¡®
psmith@example.com¡¯);
$col->insert($doc, true);

// Get the id of last insert
$id = $doc['_id'];
[/php]

You might have noticed that we used an array to define our ¡°row¡± of data, which are called ¡°documents¡±. On the insert method, the second argument will set the query to do a ¡°safe insert¡±. This will allow us to find out if the query executed properly. If not set, it will not get that information. So I would set it to true if you want to be able to debug your queries. If you are wondering about the password, it¡¯s the MD5 hash for ¡°password¡±.

Querying Data
MySQL

[php]
// Get all rows
$sql = ¡°SELECT * FROM `$tbl`¡±;
$qry = mysql_query($sql, $link);
$cnt = mysql_num_rows($qry);

echo ¡®All rows:<br/>¡¯;

if($cnt > 0)
{
do
{
$row = mysql_fetch_assoc($qry);

echo ¡®<pre>¡¯;
print_r($row);
echo ¡®</pre>¡¯
}
}

// Query for the row matching the last insert ID
$sql = ¡°SELECT * FROM `$tbl` WHERE `id` = {$id}¡±;
$qry = mysql_query($sql, $link);
$row = mysql_fetch_assoc($qry);

echo ¡®Single row (id = $id):<br/><pre>¡¯;
print_r($row);
echo ¡®</pre>
[/php]

MongoDB

[php]
// Get all documents
$res = $col->find();

echo ¡®All documents:<br/>¡¯;

foreach($res as $doc)
{
echo ¡®<pre>¡¯;
print_r($doc);
echo ¡®</pre>¡¯;
}

// Query for the document matching the last insert ID
$doc = $col->findone(array(¡®_id¡¯ => $id));

echo ¡®Single document (_id = $id):<br/><pre>¡¯;
print_r($doc);
[/php]

The MongoDB support in PHP has function to pull a single document, or all the documents. Once again, we use arrays to define something, in this example, we define our constraint.

Upading Data
MySQL

[php]
$sql = ¡°UPDATE `$tbl` SET `password` = ¡®b497dd1a701a33026f7211533620780d¡¯ WHERE `id` = {$id}¡±;
$qry = mysql_query($sql, $link);

$sql = ¡°SELECT * FROM `$tbl` WHERE `id` = {$id}¡±;
$qry = mysql_query($sql, $link);
$row = mysql_fetch_assoc($qry);

echo ¡®Updated row (id = $id):<br/><pre>¡¯;
print_r($row);
echo ¡®</pre>
[/php]

MogoDB

[php]
// Update a document
$col->update(array(¡®_id¡¯ => $id), array(¡®$set¡¯ => array(¡®password¡¯ => ¡®b497dd1a701a33026f7211533620780d¡¯)));

// Query the updated docuemnt
$doc = $col->findone(array(¡®_id¡¯ => $id));

echo ¡®Updated docuement:<br/><pre>¡¯;
print_r($doc);
echo ¡®</pre>¡¯;
[/php]

The MongoDB extension has a function to perform updates. The first argument is an array of constraints, IE ¡°WHERE {expression}¡±. The second is the data we want to update and what we want to update it with. Pretty simple, right?

Indexing data
MySQL

[php]
// Create a unique index
$sql = ¡°ALTER TABLE `$db`.`$tbl` ADD UNIQUE `login` (`login`)¡±;
$qry = mysql_query($sql, $link);
[/php]

MongoDB

[php]
// Create a unique index
$col->ensureIndex(array(¡°login¡± => 1), array(¡°unique¡± => true, ¡°dropDups¡± => true));
[/php]

MongoDB has method for creating index name ¡°ensureIndex¡±. The first parameter is an array of what we want to index and the value is ether 1 or -1. 1 means that the index will sort the data for this in an ascending manor, while -1 will sort it in a descending manor. The second parameter are extra options. In this example I tell it to make what ever I¡¯m indexing as a unique index, that way I don¡¯t end up with multiple ¡°jsmith¡± entries. Also, I¡¯ve told it to drop any documents that have duplicates of the data in the ¡°login¡± ¡°column¡±. Another note is that ¡°columns¡± in MongoDB should be called ¡°elements¡±, since we are really dealing with arrays.

Lets make sure our index is working shall we?
MongoDb

[php]
// Test our unique index
try
{
$doc = array(¡®login¡¯ => ¡®jsmith¡¯, ¡®password¡¯ => ¡® 5f4dcc3b5aa765d61d8327deb882cf99¡Ç, ¡®email¡¯ => ¡®
jsmith@example.com¡¯);
$col->insert($doc, true);
}
catch(MongoCursorException $e)
{
echo ¡®Could not insert document. Double check values.<br />¡¯;
}


 
 

Total 78
¹øÈ£ Á¦   ¸ñ ±Û¾´ÀÌ ³¯Â¥ Á¶È¸
78 ¿ø°Ý¼­¹ö¿¡¼­ authorized_keys ·Î ÀÎÁõ¾ÈµÉ¶§ ½ÑÀ¥È£½ºÆà 07-31 26814
77 pptp vpn ¿¬°á¼­ 711 ¿À·ù ½ÑÀ¥È£½ºÆà 01-13 27423
76 ¹Ì¼ÒÄÉÀ̽º ½ÑÀ¥È£½ºÆà 07-30 28420
75 MS-SQL ¸®Çø®ÄÉÀÌ¼Ç (º´ÇÕº¹Á¦) Å×À̺í Ãß°¡ ¹æ¹ý ½ÑÀ¥È£½ºÆà 05-09 35832
74 [Linux] Çϵå¿þ¾î Á¤º¸ È®ÀÎÇϱâ - dmidecode, lshw ½ÑÀ¥È£½ºÆà 03-06 279272
73 The 5 minute DBA: Default My.cnf File ½ÑÀ¥È£½ºÆà 03-06 62529
72 [Àåºñ] OmniSwitch 6850-24x L2/L3 ½ºÀ§Ä¡ ¼³Á¤ ½ÑÀ¥È£½ºÆà 03-05 167608
71 MSSQL _Log.LDF ÆÄÀÏ »çÀÌÆ® Ä¿Á³À»¶§ Á¤¸®ÇÏ´Â ¹æ¹ý ½ÑÀ¥È£½ºÆà 02-20 24607
70 MSSQL¿¡¼­ DB º¹¿ø ÈÄ »ç¿ëÀÚ¿¡ ·Î±×ÀÎÀ̸§ÀÌ ¾ø¾î ¿À·ù°¡ ³ª´Â ¡¦ ½ÑÀ¥È£½ºÆà 02-19 25580
69 centos 6.2 oracle 10g ¼³Ä¡ (2) ½ÑÀ¥È£½ºÆà 12-17 381933
68 mysql Replicating ½ÑÀ¥È£½ºÆà 10-31 48022
67 PHP ¿Í MongoDB »ç¿ë¹ý ½ÑÀ¥È£½ºÆà 07-27 175220
66 ·¹À̾î Æ˾÷ - ´Ý±â&¿À´Ã ÇÏ·ç ¿­Áö ¾Ê±â ½ÑÀ¥È£½ºÆà 06-12 52092
65 backuppc ¼Ò½º¼³Ä¡ Çϱâ (1) ½ÑÀ¥È£½ºÆà 06-11 65984
64 rsyslog + LogAnalyzer ½ÑÀ¥È£½ºÆà 05-21 83082
 1  2  3  4  5  6