| 
										 
											
												| 
														Defining an Error Handling Function
 If we know that a certain statement or block of code can throw an exception, we 
														should wrap that code within the try…catch block to prevent the default error 
														message being displayed and present a user-friendly error page. But before we 
														proceed, let's create a function that will render an error message and exit the 
														application. As we will be calling it from different script fi les, the best 
														place for this function is, of course, the common.inc.php file.
													 Our function, called showError(), will do the following: 
														
														Render a heading saying "Error".
														
														Render the error message. We will escape the text with the htmlspecialchars() 
														function and process it with the nl2br() function so that we can display 
														multi-line messages. (This function will convert all line break characters to 
														<br> tags.)
														
															Call the showFooter() function to close the opening and tags. The function will 
															assume that the application has already called the showHeader() function. 
															(Otherwise, we will end up with broken HTML.)
														 |   Chapter Contents
This excerpt from Chapter NO. 3 "Error Handling" from Learning 
															PHP Data Objects by Dennis Popel, is printed with permission 
														from Packt Publishing, Copyright 
														2007.
   |  
										
 
										 
											
												|  |   We will also have to modify the block that creates the connection object in 
														common. inc.php to catch the possible exception. With all these changes, the 
														new version of common.inc.php will look like this:
													 |  <?php/**
 * This is a common include file
 * PDO Library Management example application
 * @author Dennis Popel
 */
 // DB connection string and username/password
 $connStr = 'mysql:host=localhost;dbname=pdo';
 $user = 'root';
 $pass = 'root';
 /**
 * This function will render the header on every page,
 * including the opening html tag,
 * the head section and the opening body tag.
 * It should be called before any output of the
 * page itself.
 * @param string $title the page title
 */
 function showHeader($title)
 {
 ?>
 <html>
 <head><title><?=htmlspecialchars($title)?></title></head>
 <body>
 <h1><?=htmlspecialchars($title)?></h1>
 <a href="books.php">Books</a>
 <a href="authors.php">Authors</a>
 <hr>
 <?php
 }
 /**
 * This function will 'close' the body and html
 * tags opened by the showHeader() function
 */
 function showFooter()
 {
 ?>
 </body>
 </html>
 <?php
 }
 /**
 
 * This function will display an error message, call the
 * showFooter() function and terminate the application
 * @param string $message the error message
 */
 function showError($message)
 {
 echo "<h2>Error</h2>";
 echo nl2br(htmlspecialchars($message));
 showFooter();
 exit();
 }
 // Create the connection object
 try
 {
 $conn = new PDO($connStr, $user, 
										$pass);$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 }
 catch(PDOException $e)
 {
 showHeader('Error');
 showError("Sorry, an error has occurred. Please try your request
 later\n" . $e->getMessage());
 }
 As you can see, the newly created function is pretty straightforward. The more 
										interesting part is the try…catch block that we use to trap the exception. Now 
										with these modifi cations we can test how a real exception will get processed. 
										To do that, make sure your connection string is wrong (so that it specifi es 
										wrong database name for MySQL or contains invalid fi le name for SQLite). Point 
										your browser to books.php and you should see the following window: 
 
										
											
												
													
														
																Page 1 | page 
																2 | 
																page 3 
													
												 
										
											
												
													
														
													
												 |