How to Perform CRUD in MongoDB Document using PHP Part 2
Introduction
If you’re using MongoDB to store data, you’ll need to be able to perform common operations such as reading, updating and deleting documents. These tasks are quick and simple to accomplish using PHP, as long as your version of PHP is compatible and properly configured. In this step-by-step tutorial, we’ll look at an example of showing a MongoDB document using its id using PHP.
How to Update MongoDB Document using PHP
Prerequisites:
Before we attempt to perform any MongoDB operations in PHP, it’s important to make sure certain prerequisites are in place. A few key system requirements include:
MongoDB and the MongoDB PHP driver must be properly configured beforehand.
To verify that the MongoDB driver is installed, use the following command:
1 | pecl search mongo |
You should see a response similar to this:
1 2 3 | Package Stable/(Latest) Local mongo 1.6.16 (stable) MongoDB database driver mongodb 1.6.0alpha1 (alpha) 1.5.3 MongoDB driver for PHP |
- To determine what PHP version is installed on your system, use the command shown below:
1 | php --version |
The output should look something like this:
1 2 3 4 | PHP 7.2.15-0ubuntu0.18.04.2 (cli) (built: Mar 22 2019 17:05:14) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.15-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies |
Starting the MongoDB Database Daemon.
Once you’ve confirmed that the system requirements in place, you can start up the MongoDB database daemon.
First, open your terminal by pressing Ctrl + Alt + T.
Start the MongoDB service and check the status using the command shown below. Using the
sudo
command will prevent permission-related issues that you might encounter while starting the MongoDB service:
1 2 | sudo systemctl start mongod sudo systemctl status mongod |
You should see something like this:
NOTE: * Make sure that you completed the tasks described in Part 1 of this series in order to move forward with the steps listed in this second part of this series.
The show.php page
The page shown below will show the details of the document you’re interested in viewing via a form:
1 2 3 4 5 6 7 | <?php require_once('../../../private/initialize.php'); // (1) $id = $_GET['id']; // (2) $result=find_subject_by_id($id); // (3) ?> <?php $page_title = 'Show Subject'; ?> <?php include(SHARED_PATH . '/staff_header.php'); ?> // Loads the page header |
- Include the
initialize.php
only once. - Get the
id
from superglobals $_GET. - A function call to show the document in the page using
id
as its reference.
NOTE : This code can be found in the query_functions.php
.
1 2 3 4 5 6 7 8 9 | function find_subject_by_id($id){ // MongoDB\Driver\Manager global $db; // (1) $options = [ ]; // (2) $filter = ['_id' => new MongoDB\BSON\ObjectID( $id )]; // (3) $query = new MongoDB\Driver\Query($filter, $options); // (4) $result = $db->executeQuery("abi_db.subjects", $query); // (5) return $result; // (6) |
- This calls the variable
$con
from the included php file in theinitialize.php
for the mongoDB connection. $options
can hold parameters to fine tune the query.- When matching an
_id
with an ObjectId value the user must useMongoDB\BSON\ObjectID
- Instantiate the Query class.
- The
executeQuery
method is used to execute the query. This includes the databaseabi_db
and collection nametopics
and a query object is passed to this function, on success returns acursor
on an exception thrown otherwise. $result
holds the details of the document in array format.
1 2 3 4 5 6 7 8 | // PHP Library global $con; // (1) $filter = ( new MongoDB\BSON\ObjectID( $id )); // (2) $db = $con->abi_db; // (3) $collection = $db->subjects; // (4) $result = $collection->find(['_id'=> $filter]); // (5) return $result; // (6) } |
- This calls the variable
$con
from the included php file in theinitialize.php
for the mongoDB connection. - When matching an
_id
with an ObjectId value the user must useMongoDB\BSON\ObjectID
. - Connect to the database
abi_db
. - Creates the subjects document if it does not exist.
- Finds the document in the collection
subjects
that matches the value of the_id
. - This holds the details for the collection found from the query.
- Save the
function find_subject_by_id($id)
in a php filequery_functions.php
to be able to reuse the same as required.
1 2 3 4 |
- The below script loops through the
$result
variable and store the details in$row
variable.
1 | <?php foreach($result as $row){ ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!-- This wil display the value of menu_name field from the document --> <h1>Subject: <?php echo h("$row->menu_name");?> </h1> <div class="attributes"> <dl> <dt>Menu Name</dt> <!-- This wil display the value of menu_name field from the document --> <dd><?php echo h("$row->menu_name");?></dd> </dl> <dl> <dt>Position</dt> <!-- This wil display the value of position field from the document --> <dd><?php echo h("$row->position");?></dd> </dl> <dl> <dt>Visible</dt> <!-- This wil display the value of visible field from the document --> <dd><?php echo h("$row->visible");?></dd> </dl> </div> <?php } ?> </div> </div> |
1 | <?php include(SHARED_PATH . '/staff_footer.php'); ?> // This will load the footer of the html page |
Save the above as
show.php
.To see this php page, click the View link in the index.php page. The result will resemble something like this.
Conclusion:
When you’re working with data in MongoDB, retrieving a document in order to view its details is a common task. It’s easy to show a MongoDB document in PHP, as long as you have its id
for reference. Armed with the code provided in this article as an example, you should have no trouble showing a MongoDB document using its id using PHP.
The entirety of the code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php require_once('../../../private/initialize.php'); if(!isset($_GET['id'])){ redirect_to(url_for('/staff/pages/index.php')); } $id = $_GET['id']; $result=find_subject_by_id($id); ?> <?php $page_title = 'Show Subject'; ?> <?php include(SHARED_PATH . '/staff_header.php'); ?> <div id="content"> <a class="back-link" href="<?php echo the_url('/staff/subjects/index.php'); ?>"> « Back to the List</a> <div class="subject show"> <?php foreach($result as $row){ ?> <h1>Subject: <?php echo h("$row->topic_name");?> </h1> <div class="attributes"> <dl> <dt>Menu Name</dt> <dd><?php echo h("$row->topic_name");?></dd> </dl> <dl> <dt>Position</dt> <dd><?php echo h("$row->position");?></dd> </dl> <dl> <dt>Visible</dt> <dd><?php echo h("$row->visible");?></dd> </dl> </div> <?php } ?> </div> </div> <?php include(SHARED_PATH . '/staff_footer.php'); ?> |
Pilot the ObjectRocket Platform Free!
Try Fully-Managed CockroachDB, Elasticsearch, MongoDB, PostgreSQL (Beta) or Redis.
Get Started