How to use PHP to connect to and retrieve data from MySQL

In our previous set of articles, we've created a simple 2 page website that allows users to submit comments about the page they were looking at. In this article, we're going to show you how to print all of the comments that users have left for a page.

Step 1. Create our SQL Query to grab all comments

In order to display comments on a page, we first need to know what comments to show. When we setup our site we created two pages, and each page was assigned a unique id number. This ID number will be used to gather comments for that specific page. For example, when the user is on page 1, we'll select all of the comments in the database assigned to page "1".

If you're not familiar with SQL, you can use phpMyAdmin to help write your SQL command. To do this:

In the left menu, first click your database name and then click the table to work with. If you're following our example, we'll first click on "_mysite" and then "comments".

Click "Search" in the top menu

Enter 1 for the "Value" of "articleid" and then click "Go"

After running the search, phpMyAdmin will show you all comments that belong to article 1, as well as the SQL syntax you can use to select those comments. The code provided is:

SELECT * FROM `comments` WHERE `articleid` =1 LIMIT 0 , 30

Step 2. Setting up our PHP code to SELECT our comments

Now that we have our sample SQL query, we can use it to create the php code that will print all comments on a page. Below is the example code that we created. If you're not familiar with php, any line that begins with a // is a comment, and comments are used by developers to document their code. In our example, we have quite a few comments to help explain what the code is doing, but keep in mind that most scripts do not have as many comments.

<?
// At this point in the code, we want to show all of the comments
// submitted by users for this particular page. As the comments
// are stored in the database, we will begin by connecting to
// the database
// Below we are setting up our connection to the server. Because
// the database lives on the same physical server as our php code,
// we are connecting to "localhost". inmoti6_myuser and mypassword
// are the username and password we setup for our database when
// using the "MySQL Database Wizard" within cPanel
$con = mysql_connect("localhost","inmoti6_myuser","mypassword");
// The statement above has just tried to connect to the database.
// If the connection failed for any reason (such as wrong username
// and or password, we will print the error below and stop execution
// of the rest of this php script
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// We now need to select the particular database that we are working with
// In this example, we setup (using the MySQL Database Wizard in cPanel) a
// database named inmoti6_mysite
mysql_select_db("inmoti6_mysite", $con);
// We now need to setup our SQL query to grab all comments from this page.
// The example SQL query we copied from phpMyAdmin is:
// SELECT * FROM `comments` WHERE `articleid` =1 LIMIT 0 , 30
// If we run this query, it will ALWAYS grab only the comments from our
// article with an id of 1. We therefore need to update the SQL query
// so that on article 2 is searches for the "2", on page is searches for
// "3", and so on.
// If you notice in the URL, the id of the article is set after id=
// For example, in the following URL:
// http://phpandmysql.inmotiontesting.com/page2.php?id=2
// ... the article id is 2. We can grab and store this number in a variable
// by using the following code:
$article_id = $_GET['id'];
// We also want to add a bit of security here. We assume that the $article_id
// is a number, but if someone changes the URL, as in this manner:
// http://phpandmysql.inmotiontesting.com/page2.php?id=malicious_code_goes_here
// ... then they will have the potential to run any code they want in your
// database. The following code will check to ensure that $article_id is a number.
// If it is not a number (IE someone is trying to hack your website), it will tell
// the script to stop executing the page
if( ! is_numeric($article_id) )
die('invalid article id');
// Now that we have our article id, we need to update our SQL query. This
// is what it looks like after we update the article number and assign the
// query to a variable named $query
$query = "SELECT * FROM `comments` WHERE `articleid` =$article_id LIMIT 0 , 30";
// Now that we have our Query, we will run the query against the database
// and actually grab all of our comments
$comments = mysql_query($query);
// Before we start writing all of the comments to the screen, let's first
// print a message to the screen telling our users we're going to start
// printing comments to the page.
echo "<h1>User Comments</h1>";
// We are now ready to print our comments! Below we will loop through our
// comments and print them one by one.
// The while statement will begin the "looping"
while($row = mysql_fetch_array($comments, MYSQL_ASSOC))
{
// As we loop through each comment, the specific comment we're working
// with right now is stored in the $row variable.
// for example, to print the commenter's name, we would use:
// $row['name']
// if we want to print the user's comment, we would use:
// $row['comment']
// As this is a beginner tutorial, to make our code easier to read
// we will take the values above (from our array) and put them into
// individual variables
$name = $row['name'];
$email = $row['email'];
$website = $row['website'];
$comment = $row['comment'];
$timestamp = $row['timestamp'];
// Be sure to take security precautions! Even though we asked the user
// for their "name", they could have typed anything. A hacker could have
// entered the following (or some variation) as their name:
//
// <script type="text/javascript">window.location = "http://SomeBadWebsite.com";</script>
//
// If instead of printing their name, "John Smith", we would be printing
// javascript code that redirects users to a malicious website! To prevent
// this from happening, we can use the htmlspecialchars function to convert
// special characters to their HTML entities. In the above example, it would
// instead print:
//
// <script type="text/javascript">window.location = "http://SomeBadWebsite.com";</script>
//
// This certainly would look strange on the page, but it would not be harmful
// to visitors
$name = htmlspecialchars($row['name'],ENT_QUOTES);
$email = htmlspecialchars($row['email'],ENT_QUOTES);
$website = htmlspecialchars($row['website'],ENT_QUOTES);
$comment = htmlspecialchars($row['comment'],ENT_QUOTES);
// We will now print the comment to the screen
echo " <div style='margin:30px 0px;'>
Name: $name<br />
Email: $email<br />
Website: $website<br />
Comment: $comment<br />
Timestamp: $timestamp
</div>
";
}
// At this point, we've added the user's comment to the database, and we can
// now close our connection to the database:
mysql_close($con);
?>

As stated earlier, we purposely include many comments to help explain what the code was doing. While the example code above looks like a lot of work, if we strip out all of the comments, the code looks more like:

Am a programmmer who would wish to have a text box similar to this of yours, that is were users can edit their text. I would be very grateful if you help me either with codes or how to write it. Thankyou in advance

Thanks for the question. I'm not sure what you're asking exactly, but the code provided above shows how to create the query to the database. If you're trying to create a text editor in PHP, that's a very different task. We don't provide a tutorial to do that. However, there are many solutions already available for this. If you want a good third-party solution, check out TinyMCE. You can probably find a good instructional on programming a text editor by simply searching with a your favorite search engine. However, most of the entries on the subject suggest using existing solutions.

I hope that helps to answer your question! Please let us know if you require any further information.

we are doing manually importing daily in our admin page.but we need automatically for reducing time. I have loaded xml file data to database(mysql 5.6).but now am struck next step is what? how to import from database.Am using php.So please help me.I need guide for this

I am unsure exactly of what you are asking. It sounds as if you have gotten XML data into the database. I am unsure what you are looking to happen after that. Please understand that we do not take on coding projects and any coding samples we give are very simple. Many will need to be enhanced or modified to perform specific functions.

Thank you so much for this helpful tutorial series, I've always wanted to get into PHP but it just made my mind boggle. Your articles have been so informative and easy to follow. Please do you have any more????

hi guys am also working on a project and am stuck at this point where i want to search an employees details from the database using their personal numbers as my primary key in the database.

its a single form which has several buttons for ADD,DELETE,UPDATE and SEARCH..... This will all be carried out by the Administrator ...... please kindly help me , the SEARCH BUTTON is just driving me crazy dont know if its in the coding or the database (phpmyadmin)

It is impossible to diagnose an issue without code to see what is going on. And even then we can only spot syntactical or programmatic errors. Configuration errors, if there are any, are impossible to spot without server access.

You may be able to find out the issue by printing out the query variable on the page so you can see the exact query being sent to the database. Once you get that, take it to phpmyadmin and play with it until you get the results you want. After determining the exact query you need, change the code so it creates the query in the proper manner. It will then be able to pull up the data for you.

thats the portion i want to work on...... the add section is working well but when i try to search for the same employees' details using the P_NO as the primary key it does not display in the textboxes that are there.

i want the same details that i insert in the database to be displayed again when i click the search button.

I did see an issue with the query, it is using the === evaluator in the MySQL. MySQL does not recognize that, it simply uses a single =. Give that a try and you may see the results you are looking for.

thanks Scott for your time. i have changed that and already got to the page and entered the P_NO but when i click the search button there is a pop up that tells me to "! fill out this field" just at the lower textboxes..... i dont understand why.

Kindly assist in me in writing a code to select data from mysql database and to the display the result in the a simple html form. Note I have done this but it is prompting an error. I want the select criterion to be available for make in html form.

The code I wrote is below.

<?php

$mysqli = new mysqli("localhost", "root", "", "godfrey1");

/* check connection */

if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());

exit();

}

$src=mysqli_real_escape_string($con,$_POST['search']);

$query = "SELECT lname, fname FROM quiztest2 WHERE lname='$src';

if ($result = $mysqli->query($query)) {

/* fetch object array */

while ($row = $result->fetch_row()) {

printf ("%s (%s)\n", $row[0], $row[1]);

}

/* free result set */

$result->close();

}

/* close connection */

$mysqli->close();

?>

Please I need you to help me edit or better still give a guide to solving this.

This is a great tutorial! Especially for people like myself that have no experience! I'm looking forward to creating the various steps for my website. I'm curious to know of it would be difficult to add in the ability for an email to be triggered to an address when someone adds a comment to the webpage? It would be ideal if the email included the person's name and comment but even just an email to alert me that someone has added a post would be a great benefit. I didn't see a tutorial for this - and I don't know how complicated it would be to add - esp for a beginner like myself!

That is very possible, however it would take some coding knowledge to make the changes. We do not have a tutorial currently for that, but I will add it to our list as I think it would be a good addition to the articles.

I got everything to work as it should, but I've been trying to figure out how save words into the articleid field in the database. I changed the type to varchar and if I go to some id=a, for example, it gives me an error: "Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/user/public_html/display_comments.php on line 18." It does, however, write to the database, because when I go there I can see a under articleid. But the comments for that won't display and the same error occurs. How to I alter the code so I can save and display the articleid as words without getting this error? Currently I'm limited to just numeric values.

Thanks for the question. The article provides you some basic functionality, but providing modifications for other purposes is typically beyond the scope of the support center. The articleid used in multiple locations with the code and is expected by the code to be a certain format. Since you altered it you caused a resulting "ripple effect" because multiple lines of code no longer work as per the original intent. If you want to save data, then you should add another variable that you can assign to save as a word.

Apologies, but we cannot provide the code for your changes as it is beyond our scope., but you be might find more information by learning about PHP coding here.

Hi, I Have created a calendar for my websites which display the events in the calendar but What I am looking for now is once the user logged in to their account I would like to display the events that the user has signed up for the events in the side of the calendar not all the events in the text box just that the user has signed up for. Do you have any ideas how do i do this by using php code?

I am not able to give a specific code example here as I do not know how you have coded so far and do not know your database structure, but I can provide the concept. When a user logs in, they likely have a userid. This is likely tied to the specific events the user has signed up for. On the calendar, simply only display the events that come from the database linked to that userid. This will then allow the user to only view the events they have signed up for.

hello sir! i'm very much worried how to display specific information like i have the list of students with their information in the databse what im going to display is that when i click specific student i can only view his/ her information but what i have here is all the infomation of all students from the database. im very confuse how to display only one student info. please help me

example for more clear:

STUDENT LIST'S

Kennedy Kim (once i click this one)

Hannah yang

Gyle Wang

(this should be the result)

student info

name:Kennedy Kim

age: 19

address: america

i hope you reply my defense is on friday JAn. 30,2015 i need it as soon as possible.thank u in advance

hi i have been trying to work on a code simular to this one for some time now and i am constantly hitting the same issue nowi fell like i am banging my head onto a brick wall

i have built a form and i have my DB and page to show my results

for some reason no matter which way i code the form nothing i enter into my form is reaching my DB i have tried 3 or 4 different types of tutorials to make this happen and still nothing is making it into my DB can you guys help me please

i have been trying to work in my project i hope that anyone here can help in my code i cant execute the name of the column but the data in the row is already executed all i want to execute is they are line.in the field name here is my code

Thanks for the question. We don't really provide code for this type of thing, but we can't point you in the direction of a resource that may help. Checkout this guide on creating a login page. This should give you some direction on what you are trying to create.

I hope this helps to answer your question, please let us know if you require any further assistance.