The SitePoint Forums have moved.

You can now find them here.
This forum is now closed to new posts, but you can browse existing content.
You can find out more information about the move and how to open a new account (if necessary) here.
If you get stuck you can get support by emailing forums@sitepoint.com

If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.

This prints: Array ( [0] => fred@example.com [email] => fred@example.com)
I expected the contents of $row to be an e-mail address ('fred@example.com'), instead it's an array as above and I get a similar array (different e-mail address, of course) for each of the (five) rows returned.

I can extract what I want from $row[0] (or $row['email']), but why is the data returned in this form ?

Some books I have lead me to think this may in fact be normal MySQL behaviour, but if so can someone tell me why it's done this way, please.

This optional parameter is a constant indicating what type of array should be produced from the current row data. The possible values for this parameter are the constants MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH. Defaults to MYSQLI_BOTH.
By using the MYSQLI_ASSOC constant this function will behave identically to the mysqli_fetch_assoc(), while MYSQLI_NUM will behave identically to the mysqli_fetch_row() function. The final option MYSQLI_BOTH will create a single array with the attributes of both.

Thank you all. You have explained it very clearly, and now I can understand why in books I sometimes see '$row[0]' being processed for further use, and sometimes '$row['email']' (making an example from my instance).