PHP/MySQL FAQ: Can you share an example of a PHP script that is used to query a MySQL database and then loop over the SELECT query results?
This weekend I finally fixed a minor/known bug in my PHP/MySQL script that I use to generate the Drupal sitemap for this website. (A PHP script that queries a Drupal MySQL database.) I like to update the sitemap whenever a blog post has changed, and I had all of that working, except I wasn't accounting for changes due to user comments that are approved.
Yesterday I finally got the "user comments" portion of my Drupal sitemap script working, and I thought I'd share the code here that I use to get the comments from my Drupal database.
PHP/MySQL code to read the Drupal comments database table
The PHP/MySQL code I'm sharing here doesn't actually generate the sitemap; it just demonstrates how to create a class named Comment; query the database for all the Drupal comments that have been approved; and then adds those comments to an array named comments. Optionally, you can un-comment the line near the bottom of the script to print the comment information using the PHP printf function.
Here is the source code for my PHP/MySQL/Drupal comments script:
#!/usr/local/bin/php -q
<?php
// created by alvin alexander, devdaily.com
class Comment
{
var $cid; // comment id
var $nid; // nid this comment belongs to
var $time; // time comment was created or last edited
var $status; // 0 = published
function Comment($cid, $nid, $time, $status)
{
$this->cid = $cid;
$this->nid = $nid;
$this->time = $time;
$this->status = $status;
}
function print_details()
{
printf("%s, %s, %s, %s\n", $this->cid, $this->nid, $this->time, $this->status);
}
}
#--------#
# MAIN #
#--------#
// (1) connect to the database; change these parameters as needed
$db_host = 'localhost';
$db_user = 'username';
$db_pass = 'password';
$db_dbname = 'drupal';
$link = mysql_connect($db_host, $db_user, $db_pass);
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db ($db_dbname);
// (2) create a list of Comment objects from the comments db table.
// i get this by nid in ascending order for particular needs i have.
$q = "select cid, nid, timestamp, status from comments where status = 0 order by nid asc";
$result = mysql_query($q);
// create an empty comments array
$comments = array();
// populate the comments array from the database data
while ($row = mysql_fetch_array($result, MYSQL_BOTH))
{
$c = new Comment($row[0], $row[1], $row[2], $row[3]);
array_push($comments,$c);
# use this next line for debugging, as needed
#$c->print_details();
}
// free up the database resources
mysql_free_result($result);
mysql_close($link);
?>
Drupal PHP/MySQL comments script -- discussion
I'm still a long way away from being a competent PHP programmer, but I believe this PHP/MYSQL script is technically okay. I hope that by sharing the source code here, this will be a decent example of:
- How to create a simple PHP class.
- How to connect a PHP script to a MySQL database.
- How to specifically query the Drupal comments database table.
- One way to print the data you get from your PHP database query.
If you have any questions, or suggestions on improving this code, just use our Comments section below.

