处理SELECT查询结果的主要工具是mysql_fetch_array(),它带有一个查询结果变量(我曾称之为$result),并以数组格式一次返回一行数据。你将希望在一个循环内使用这个函数,只要有更多的行,循环就会持续访问返回的每一行。从查询读取每条记录的基本构造如下:
while($row = mysql_fetch_array($result)){ //do something with $row }
mysql_fetch_array()函数带有一个可选的参数,用于指定返回的数组的类型: 联合数组、索引数组或者这两者。联合数组允许通过名称引用列值,而索引数组则要求只使用数字(对于返回的第一列, 从0开始)。每个参数都是通过以下表中列出的常量定义的。与其他选项相比,MYSQL_NUM设置要快那么一点点(并且使用更少的内存)。与之相反,MYSQL_ASSOC更明确($row["column"]比$row[3]更明确),即使表结构或查询发生变化,它也会继续工作。
常量 | 示例 |
---|---|
MYSQL_ASSOC | $row["column"] |
MYSQL_NUM | $row[0] |
MYSQL_BOTH | $row[0]或$row["column"] |
使用mysql_fetch_array()函数时,可以采取的一个可选的步骤是:一旦使用查询结果信息完成了工作,即可释放这些信息:
mysql_free_result($result);
这一行会消除$result占用的系统开销(内存)。该步骤是可选的,因为PHP将在脚本末尾自动释放资源,但是就像使用mysql_close()一样,这是一种良好的编程风格。为了演示如何处理查询返回的结果,将创建一个脚本,用于查看当前注册的所有用户。
$query = "SELECT CONCAT(last_name, ', ', first_name) AS name, DATE_FORMAT(registration_date, '%M %d, %Y') AS dr FROM users ORDER BY registration_date ASC"; $result = @mysql_query($query); if ($result) { echo '<table cellspacing="0" cellpadding="0" border="1"> <tr><th>Name</th><th>Date Registered</th></tr>'; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo '<tr><td>'.$row["name"].'</td><td>'.$row["dr"].'</td></tr>'; } echo '</table>'; mysql_free_result($result); } else { echo '<p class="error">The current users could not be retrieved We apologize for any inconvenience</p>'; echo '<p>'.mysql_error().'<br><br>Query: '.$query.'</p>'; } mysql_close();