Presentation is loading. Please wait.

Presentation is loading. Please wait.

_______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition1  Wiley and the.

Similar presentations


Presentation on theme: "_______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition1  Wiley and the."— Presentation transcript:

1 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition1  Wiley and the book authors, 2002 PHP Bible Chapter 18: PHP Efficiency and Style

2 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition2  Wiley and the book authors, 2002 Summary Using database resources efficiently Making the database work for you Timestamping insertions and updates

3 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition3  Wiley and the book authors, 2002 PHP Efficiency and style This chapter is for people making database-enabled PHP web sites who suspect that they are doing things awkwardly or inefficiently Included are some tips and tricks for making things run faster and show some common ways that database systems can save you from writing unnecessary PHP code

4 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition4  Wiley and the book authors, 2002 Connections – Reduce, Reuse, Recycle One important thing to realize is that establishing an initial connection with a database is never a cheap operation  Unless your PHP script is doing some unusually computationally-intensive work, the overall database interaction will be the most time and resource-intensive part of your code, and it is frequently true that the establishment of a connection is the most expensive part of code that interacts with a database, even if the connection is only established once in serving the page One thing that is surprising is that with many database programs, it is possible to even retain the results from more than one query at once, even though only one connection has been opened If the overhead of opening new database connections is killing your performance, you may want to investigate opening persistent connections  Unlike regular db connections,these connections are not automatically killed when your page executes, but are saved in a pool for future use  The first time a script opens a connection in this manner, it is opened in the same was as with a regular db connection, the next script will get the same connection if the parameters of the new request are identical  To create a persistent connection to a MySQL db, use mysql_pconnect()

5 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition5  Wiley and the book authors, 2002 Make the database work for you As when writing code in a programming language, writing code that interacts with a database is an exercise in appropriate division of labor People who write programming languages and databases have agreed to automate, standardize, and optimize certain tasks that come up over and over again in programming, so that programmers don't have to constantly reinvent the wheel when making their individual applications As with sorting and other common tasks used within programming, if you can find a function that can perform that task, use it instead of writing your own. It will generally be much faster than what you can write and it will almost always be easier

6 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition6  Wiley and the book authors, 2002 Make the database work for you (cont.) In particular, any searching or sorting of the contents of a database is best done within that database, rather than by your own code In this example, the query returns the entire dataset of the author table, instead of just what is needed for the application function print_first_name ($lastname, $dbconnection) { $query = 'select firstname, lastname from author'; $result_id = mysql_query($query, $dbconnection) or die ('can\'t query'); while ($row = mysql_fetch_array($result_id)) if ($row['lastname'] == $lastname) print('The first name is '.$row['firstname']); } When this function is executed, it will print out every associated firstname for the lastname that is passed in as an argument

7 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition7  Wiley and the book authors, 2002 Make the database work for you (cont.) The problem is that we don't need to grab all the data in this table, pull it through the connection, and then pick and choose from it on our side of the pipe Instead, we should restrict the query with a WHERE clause function print_first_name ($lastname, $dbconnection) { $query = 'select firstname from author WHERE (lastname="'.$lastname.'")'; $result_id = mysql_query($query, $dbconnection) or die ('can\'t query'); while ($row = mysql_fetch_assoc($result_id)) print('The first name is '.$row['firstname']); } The WHERE clause ensures that only the rows we care about are selected in the first place Not only does this cut down on the data passed over the SQL connection, the code used to locate the correct rows on the database side is almost certainly quicker than the previous PHP code

8 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition8  Wiley and the book authors, 2002 Sorting and aggregating Exactly the same argument applies if you find yourself writing code to sort results that have been returned from your database, or to count, average, or otherwise aggregate those results In general, the ORDER BY syntax in SQL will allow you to presort your retrieved rows by any prioritized list of columns in the query, and that sort will probably be more efficient than either homegrown code or the PHP array-sorting functions Similarly, rather than looping through DB rows to count, sum, or average a value, investigate whether the syntax of your particular database's flavor of SQL supports the GROUP BY construct, and in-query functions like count, sum, and average In calculated fields especially, you can use the AS keyword to specify/change the field name that gets returned in the query $sql = 'SELECT count(ID) AS ID_Count FROM author';  Will return a one-field (ID_Count) record which counts the occurrences of ID in the table author $sql = 'SELECT sum(charge) AS Charge_Sum FROM order_details GROUP BY order_id';  Will return a record for each unique order_id in order_details calculating the sum of the charge field within each group $sql = 'SELECT ID FROM author ORDER BY ID LIMIT 1'; $sql = 'SELECT MIN(ID) AS Min_ID FROM author';  Both of these queries will return the minimum author ID from the author table, but the second query will execute faster since once the minimum ID is found, it will not have to re-order the remaining records

9 _______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition9  Wiley and the book authors, 2002 Creating date and time fields It is very common to want to associate a date and/or time with a row's data (e.g. your table rows may represent requests made by your Web users and you want to store the date and time that request was made) One way to accomplish this task would be to include a string that represents the desired date in a format parsable by your database This will work as long as the format you are attempting to store is readable as a date by your db This also requires you to query the system to find the current date and time before you can construct the appropriate string This is unnecessary in most databases since they have a current-date function $sql = 'UPDATE mytable SET mydate = now() WHERE (record_id = 1); This can also be supplanted by the usage of certain data formats in the creation of your tables in your database  MySQL includes a data type called TIMESTAMP which will automatically store the current date and time that a record is added or updated if the field in the UPDATE or INSERT query is not populated or not specified


Download ppt "_______________________________________________________________________________________________________________ PHP Bible, 2 nd Edition1  Wiley and the."

Similar presentations


Ads by Google