As the commenter Bruno Ng points out, submitting information via the form fields when using this script sends your database connection info in plain text, and that’s a bad thing.
Therefore, the form field method should only be used for testing local databases.
If you need to test production databases, your database connection info should be hard coded in the PHP script (which isn’t hard to do – look around lines 72-75).
A simple page for testing and troubleshooting a connection to a MySQL database. The PHP script will test the server address, username and password. If the database field is left empty, it will return a list of available databases. Testing a specific database is optional, but if a database name is supplied, it will return a list of the tables in that database (if any exist).
Due to problems with the Syntax Highlighter plugin producing invalid code when copying and pasting, here is a link to the code in plain text. The code below is just for reference.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>MySQL Connection Test</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> #wrapper { width: 600px; margin: 20px auto 0; font: 1.2em Verdana, Arial, sans-serif; } input { font-size: 1em; } #submit { padding: 4px 8px; } </style> </head> <body> <div id="wrapper"> <?php $action = htmlspecialchars($_GET['action'], ENT_QUOTES); ?> <?php if (!$action) { ?> <h1>MySQL connection test</h1> <form action="<?php echo $_SERVER['PHP_SELF']; ?>?action=test" id="mail" method="post"> <table cellpadding="2"> <tr> <td>Hostname</td> <td><input type="text" name="hostname" id="hostname" value="" size="30" tabindex="1" /></td> <td>(usually "localhost")</td> </tr> <tr> <td>Username</td> <td><input type="text" name="username" id="username" value="" size="30" tabindex="2" /></td> <td></td> </tr> <tr> <td>Password</td> <td><input type="text" name="password" id="password" value="" size="30" tabindex="3" /></td> <td></td> </tr> <tr> <td>Database</td> <td><input type="text" name="database" id="database" value="" size="30" tabindex="4" /></td> <td>(optional)</td> </tr> <tr> <td></td> <td><input type="submit" id="submit" value="Test Connection" tabindex="5" /></td> <td></td> </tr> </table> </form> <?php } ?> <?php if ($action == "test") { // The variables have not been adequately sanitized to protect against SQL Injection attacks: http://us3.php.net/mysql_real_escape_string $hostname = trim($_POST['hostname']); $username = trim($_POST['username']); $password = trim($_POST['password']); $database = trim($_POST['database']); $link = mysql_connect("$hostname", "$username", "$password"); if (!$link) { echo "<p>Could not connect to the server '" . $hostname . "'</p>\n"; echo mysql_error(); }else{ echo "<p>Successfully connected to the server '" . $hostname . "'</p>\n"; // printf("MySQL client info: %s\n", mysql_get_client_info()); // printf("MySQL host info: %s\n", mysql_get_host_info()); // printf("MySQL server version: %s\n", mysql_get_server_info()); // printf("MySQL protocol version: %s\n", mysql_get_proto_info()); } if ($link && !$database) { echo "<p>No database name was given. Available databases:</p>\n"; $db_list = mysql_list_dbs($link); echo "<pre>\n"; while ($row = mysql_fetch_array($db_list)) { echo $row['Database'] . "\n"; } echo "</pre>\n"; } if ($database) { $dbcheck = mysql_select_db("$database"); if (!$dbcheck) { echo mysql_error(); }else{ echo "<p>Successfully connected to the database '" . $database . "'</p>\n"; // Check tables $sql = "SHOW TABLES FROM `$database`"; $result = mysql_query($sql); if (mysql_num_rows($result) > 0) { echo "<p>Available tables:</p>\n"; echo "<pre>\n"; while ($row = mysql_fetch_row($result)) { echo "{$row[0]}\n"; } echo "</pre>\n"; } else { echo "<p>The database '" . $database . "' contains no tables.</p>\n"; echo mysql_error(); } } } } ?> </div><!-- end #wrapper --> </body> </html>
Hey i try your codes and its worked!
I think this is best easy way to try mysql status for newbies on PHP coding, if i am wrong let me know 😉
Excellent tool!
hey really cool script …..thanks for sharing your script …!!! saves lot of time
Regards
David
excellent tool, thanks
I am new to this and this script is nice, but the “Test Connection” returns an empty page in my case. Any ideas on why or what to check?
Never mind. Figured it out. Error logs are useful. 🙂 Nice script. Thanks.
works fine, thanks for sharing
yes! nice work and nice that you shared it. This script is a great tool not only for what is does but also, for a beginner php programmer like myself, it helps further understanding of the langauge constructs.
Thanks! This is such a great resource!
Thank You. Excellent Tool.
Fantastic script, it’s proved to one of my clients that the fault is with their hosting company’s setup of the mysql database, not my script.
Can’t thank you enough, 10/10 .
Thanks alot. You saved me from wating time on debugging the code.
thanks~
Pingback: Test MySQL Connection | Sellu.net
Thanks This is very gooooooooooooooooooooooooood …..!!!
THANKS! the script works great..this is exactly what I was looking for!
Is this supposed to be saved as HTML or PHP? When I save it as PHP, it gives me 500 Internal Server Error, but when I save it as HTML, there is a bunch of code under the button displayed on the page…
Dood you are awesome – nice html/php script! Thank you! 😉
I found this script very useful when troubleshooting my db connection string. Nice work.
While using this script I did run into a problem with databases that have a “-” in the name. For example, “dbname-one”. Using backticks in the sql query resolved it.
$sql = "SHOW TABLES FROM `$database`";
It’s a very minor correction, but might ease the frustration of someone who encounters it.
-Jarrod
Thanks a bunch, helped me realized I didn’t put in the correct username in my wp-config file. My host puts a prefix on any mysql username I create.
Thanks for this awesomeness!
Thanks. Saved this novice some serious time.
Pingback: ./ » Blog Archive » musings with LAMP part1
I get the same garbage as Chris got back in June!
Did he ever get a answer?
Anybody know what is going on and why we are seeing code?
Worked for me just now! One BigAss Kiss from Holland for you. Thanks for sharing.
Man, I can’t make up my mind upon whether you’re awesome or awesome! Thank you SO very much!
I can now finally move on (didn’t know what I was doing wrong all the time when coding my PHP pages) and try to make a login page (which is a pain in the ass for a novice like me).
Jarrod, thanx a lot for the add on!
I hope whoever is using this code is either running on a local webserver or running on an https (secure) protocol. Otherwise, that’s the most stupid and dangerous script to use. Submitting on a non-secure protocol means everything is submitted in PLAIN TEXT, i.e anyone can SEE what you’re submitting, and access to a Database is GOLD for any hacker!
Basically, the tool presented here is OK at most, but values to $hostname, $username, $password, and $database should be entered (hardcoded) in the code and not submitted if you’re not using https.
For those of you having trouble to make this form work, that’s probably because you have register globals to OFF, which is very good actually. You basically need to change $action to $_GET[‘action’]. For those who have notice reporting to ON, then you should also use if isset($_GET[‘action’])
Those who have register globals to ON are running their server with a big opened back door (a big security hole)!
I am aware that probably most of you who used that script are novice and beginners, and you might feel I’m coming down too hard on you, but why not do it right since the beginning?
dear all!
i got some problems this code does not work with me. please help me, i use dreamweaver cs3 and i paste your code then it show me so messy code and echo. i can not test it. i use phpmyadmin v2.5.7. please tell me the process and how to use it..
Thank you! Smiling From Cambodia
I am seeing the code below the “Test Connection’ button as well as the other two individuals did. I don’t see the answer to this posted on the thread. Anyone know why this is happening? Using Firefox 3.6.10. Same thing happens with current versions of Chrome and Opera. IE8 just shows a blank screen.
A PHP script for testing a MySQL database connection
Script returns blank page?
WampServer 2.0 has installed the following items:
Apache 2.2.11
MySQL 5.1.36
PHP 5.3.0
PhpMyAdmin 3.2.0.1
Then I used the script for testing a MySQL database connection and got the following error:
parse error online 27 of the “testphp.php script”
   Â
$action = htmlspecialchars($_GET['action'], ENT_QUOTES);
What to do?
Thanks
I just needed to run a quick test and this script helped out a lot. thanks 100000000000000000000000000000000000000000000000000000!
Really helped me out!
Thank you ^_^
Pingback: musings with LAMP part1
Hi I fell upon this and thought great, just what I need! Sadly there is no way that this code as presented here COULD EVER WORK or have worked. I’m sorry to say this but after spending 7 hours struggling to work out why MOST of the php displays when the page is rendered and after several people far better than me at php have tried it too and received the same nonsence and after running the code through several php editors with debugging enables I know that I have reproduced your code faithfully, without error, syntax error just as you presented it. Every “” is in the right place etc etc etc. I also notice that a number of other people experienced the same thing. SAdly you didn’t bother to respond to then. So, I conclude please, either recheck your code and prove that it does in deed work or withdraw it from the web. Nothing is worse that code presented as a working piece when it isn’t.
RayH, the code is fine. It looks like something gets corrupted when the code is copied from the web page and pasted into a new document. I’m blaming the Syntax Highlighter plugin.
Anyway, I’ve uploaded a plain text version of the plugin that I’ve confirmed to work correctly.
RayH, after looking at the page that your server is outputting, it appears that the problem is with your environment. It’s treating any > symbol in the PHP as the end of an HTML comment, and then outputting the code that follows as HTML.
Sometimes, the code is good, but the environment is the problem – be it different versions of PHP or a different php.ini configuration or what-have-you.
Hi I want to thank Oliver for the hundred and 10 miles he walked to assist me in getting the above example to function. While the problem was never fully resolved, it may well be something to do with wqamp, php.ini and windows? Oliver reallt did try to help and I thank him for that. Good luck
Hi All,. If anyone experiences the same problem as mine, ie the code was partially displayed on the page and of course it wouldn’t run, then please check that the php page was created without hidden editor characters. After sterling work by Oliver to help with the problem I managed to resolve the issue by deleting the page, creating a new one using a different editor and page type settings and then placing the code into that. Wham it worked brilliantly. Just to prove the point to myself, I then copied the code in a HTML page to see what would happen and the problems experienced were repeated there so obviously my server was not reading the page as a php page. Creating a new page sorted the problem. Thanks Oliver.
Really wonderfull
This script worked great in debugging my simple issue – minor error in database name. Thank you for posting this!!!
You freakin rock man. I used this on a japanese server configuring it. the entire host site is in japanese. you just saved my day man!!!!!!!!!!
thanks
such an excellent piece of code!
easy, stylish, light and above all, functional – just what i needed right now to do some quick testing on multiple accounts!
thnx!
Wow! A useful utility that really works!!! Thanks dude!
very good and very easy test
Very Nice.
Itz very Helpfull,
Thank You so MUCH 🙂
Bohat Aala
for more info on failed connection attempts, change this
echo “Could not connect to the server ‘” . $hostname . “‘n”;
to this
echo “Could not connect to the server ‘” . $hostname . “‘. Error message returned was ” . mysql_error() . ” n”;
Thank-you. – Works well and does what was required.
Very useful and timely – thank you for sharing, helped this newbie out alot!
how it work,? Is the file upload to /public_html,? or how,? explaint as detail, please.
I am newbie. 🙂
Pingback: SQL db check - The UNIX and Linux Forums
MySQL connection test
Hostname (usually “localhost”)
Username
Password
Database (optional)
Could not connect to the server ‘” . $hostname . “‘n”; echo mysql_error(); }else{ echo ”
Successfully connected to the server ‘” . $hostname . “‘
n”; // printf(“MySQL client info: %sn”, mysql_get_client_info()); // printf(“MySQL host info: %sn”, mysql_get_host_info()); // printf(“MySQL server version: %sn”, mysql_get_server_info()); // printf(“MySQL protocol version: %sn”, mysql_get_proto_info()); } if ($link && !$database) { echo ”
No database name was given. Available databases:
n”; $db_list = mysql_list_dbs($link); echo ”
n”;
while ($row = mysql_fetch_array($db_list)) {
echo $row[‘Database’] . “n”;
}
echo ”
n”; } if ($database) { $dbcheck = mysql_select_db(“$database”); if (!$dbcheck) { echo mysql_error(); }else{ echo ”
Successfully connected to the database ‘” . $database . “‘
n”; // Check tables $sql = “SHOW TABLES FROM `$database`”; $result = mysql_query($sql); if (mysql_num_rows($result) > 0) { echo ”
Available tables:
n”; echo ”
n”;
while ($row = mysql_fetch_row($result)) {
echo “{$row[0]}n”;
}
echo ”
n”; } else { echo ”
The database ‘” . $database . “‘ contains no tables.
n”; echo mysql_error(); } } } } ?>
i get the following error sir……the capitalized words are explainers..START CODE
MySQL connection test
Hostname (usually “localhost”)
Username INPUT
Password INPUT
Database (optional)
Could not connect to the server ‘” . $hostname . “‘n”; echo mysql_error(); }else{ echo ”
Successfully connected to the server ‘” . $hostname . “‘
n”; // printf(“MySQL client info: %sn”, mysql_get_client_info()); // printf(“MySQL host info: %sn”, mysql_get_host_info()); // printf(“MySQL server version: %sn”, mysql_get_server_info()); // printf(“MySQL protocol version: %sn”, mysql_get_proto_info()); } if ($link && !$database) { echo ”
No database name was given. Available databases:
n”; $db_list = mysql_list_dbs($link); echo ”
n”;
while ($row = mysql_fetch_array($db_list)) {
echo $row[‘Database’] . “n”;
}
echo ”
n”; } if ($database) { $dbcheck = mysql_select_db(“$database”); if (!$dbcheck) { echo mysql_error(); }else{ echo ”
Successfully connected to the database ‘” . $database . “‘
n”; // Check tables $sql = “SHOW TABLES FROM `$database`”; $result = mysql_query($sql); if (mysql_num_rows($result) > 0) { echo ”
Available tables:
n”; echo ”
n”;
while ($row = mysql_fetch_row($result)) {
echo “{$row[0]}n”;
}
echo ”
n”; } else { echo ”
The database ‘” . $database . “‘ contains no tables.
n”; echo mysql_error(); } } } } ?>
END CODE
If you use HostGator the script will not work…
This is still helping in 2015. By the way, the plain text link doesn’t work anymore. It gives a 403 and additionally a 404. I managed to copy off the text though.
Thank you. I worked for like weeks to setup a simple connection. This simple code saved my day.
Thank You Sir. 🙂
Seriously, I see that this clean and excellent piece of PHP has been helping people for over five years and it really helped me just now! I struggled for two days to create an ODBC connection on a new web hosted site. I copied your example, pasted it into notepad, deleted all the line markers and it ran perfectly the first time–proving that my DB connection was good and the data was fine. Thanks to you and everyone who share their creations.
Still works! Thanks for this.