O'Reilly logo

Upgrading to PHP 5 by Adam Trachtenberg

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Before and After: Making Multiple Queries

In PHP 4, when you need to make more than one query in a row, you’re forced to call mysql_query( ) once for each query. This often happens when you need distinct pieces of information from MySQL or when you want to create a fresh set of tables.

This isn’t a big problem when you know your queries ahead of time, because it’s easy to loop through and send them to MySQL one at a time. However, for some situations, this is not the case. For example, you’re writing a PHP frontend to MySQL, such as phpMyAdmin (http://www.phpmyadmin.net), and want the ability to take a database dump and recreate the information.

Without the ability to send the entire dump at once, you’re required to parse the data into individual statements. That’s not as easy as it sounds, because you can’t just split on the semicolon (;). For example, it’s perfectly valid to have a line like INSERT INTO users VALUES('rasmus', 'pass;word');. Since pass;word is inside single quotes, MySQL knows it doesn’t signal the end of a statement, but a simple split isn’t smart enough to understand this. As a result, you’re effectively forced to write a MySQL parser in PHP.

The restriction of one query per request is lifted in MySQLi. This actually wasn’t a limitation in PHP, but a deficit in the protocol used by earlier versions of MySQL. Another benefit of MySQL 4.1’s updated protocol is the ability to introduce a mysqli_multi_query( ) function for these types of cases.

While this is good news, ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required