您当前的位置:首页 > 网站建设笔记 >

PHP mysql_fetch_array()检索查询结果

来源:PHP与MySQL基础教程(第2版)0

处理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_fetch_array()函数中,指示如何访问返回的值。该函数的默认设置是MYSQL_BOTH
常量 示例
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();
顶部中部底部