I've been having some problems with a GoDaddy website lately (see my GoDaddy 4GH performance problems page, and in an effort to see if the errors were related to a MySQL database problem, I created the Drupal/PHP script shown below.
As a little background information, at one point I was able to catch the website when it was in failure mode, and when I did, Drupal was able render a MySQL error message. However, because Drupal logs error messages to the database -- and since this was a database error -- I wasn't seeing any error messages like this in the Drupal watchdog database logs (error reports).
So, I created this script. The reason I call it a "Drupal PHP" script is that it's really a PHP script that attempts to partially boot up Drupal when it is called.
<?php #----------------------------------------------------------- # created by alvin alexander, http://www.devdaily.com #----------------------------------------------------------- # use this script to run a query against the drupal database # without having to do anything special to hook up to the # database. #----------------------------------------------------------- # released under the creative commons share-alike license: # http://creativecommons.org/licenses/by-sa/2.5/ # link to this web page without the 'nofollow' tag if you # copy this work. #----------------------------------------------------------- # your drupal installation directory $html_dir = '/my/home/dir/html'; # make your drupal directory the root php directory chdir($html_dir); # set this drupal root constant define('DRUPAL_ROOT', $html_dir); # bootstrap drupal up to the point the database is loaded include_once('./includes/bootstrap.inc'); drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE); # now try a simple drupal query. # catch any exceptions that occur, and write them to a plain text # log file. # note: found drupal exception handling example here: # http://api.drupal.org/api/examples/dbtng_example--dbtng_example.module/7/source try { # the simple drupal 7 query $query = db_select('node', 'n'); $query->fields('n',array('title','created')) ->range(0,5); // limit to five records $result = $query->execute(); echo '<pre>'; while($record = $result->fetchAssoc()) { print_r($record); } echo '</pre>'; } catch (Exception $e) { # drupal database errors will be shown in the browser, but also # log the errors to a plain text file: # (a) write exception to browser echo "caught exception"; echo '<pre>'; echo 'message' . $e->getMessage(); echo '</pre>'; # (b) write exception to log file $myFile = '/my/home/dir/logs/database-errors.out'; $fh = fopen($myFile, 'a') or die("can't open file"); fwrite($fh, "\n"); $today = date("F j, Y, g:i a"); fwrite($fh, $today . "\n"); fwrite($fh, $e->getMessage() . "\n"); fflush($fh); fclose($fh); } ?>
If you understand PHP and Drupal (specifically Drupal 7 queries), the only magic in this process is the Drupal bootstrap process I use. I've described this technique in detail in my How to run a Drupal 7 query from PHP tutorial, so I won't repeat all of that here. Hopefully all those comments in the code will help explain everything else that's going on there.
Set this up as a web page
Once this PHP/Drupal script was properly tested, I put it at an undisclosed location on my web server, and then called it from my home computer every two minutes, and logged the results. I describe most of that process in my Shell script to download a URL and time the download speed article.
In summary, if you're looking for a PHP script to load Drupal 7, or test Drupal 7 MySQL database errors, or logs Drupal database errors to a plain text file, I hope this article has been helpful.