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

MySQL Query Iterator

Iterators are for more than just directories. You can also apply them to database queries. In Chapter 3, you saw MySQL’s new mysqli_multi_query( ) function, which is used to send multiple queries at once. However, processing involves a minimum of four functions and a do/while loop. Yikes!

Despite these complexities, the essential action is iteration: in this case, you’re iterating through database results. The iteration requires more steps than a normal query, but in its essence, it’s just iteration.

This is the perfect task to encapsulate inside an Iterator. The MySQLiQueryIterator takes a nasty string of code:

if (mysqli_multi_query($db, $query)) {
        do {
            if ($result = mysqli_store_result($db)) {
                while ($row = mysqli_fetch_row($result)) {
                    print "$row[0]\n";
            }
            mysqli_free_result($result);
        }
    } while (mysqli_next_result($db));
}

and transforms it into something clear and simple:

foreach (new MySQLiQueryIterator($db, $query) as $result) {
        if ($result) {
                while ($row = mysqli_fetch_row($result)) {
                    print "$row[0]\n";
                }
        }
}

Example 6-2 demonstrates the code for MySQLiQueryIterator.

Example 6-2. Implementing a MySQL multi-query iterator

class MySQLiQueryIterator implements Iterator { protected $link; protected $query; protected $key; protected $valid; protected $result; public function _ _construct($link, $query) { $this->link = $link; $this->query = $query; } public function rewind( ) { $this->key = 0; if (mysqli_multi_query($this->link, $this->query)) { $this->result ...

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