mysql_fetch_array

(PHP 4, PHP 5)

mysql_fetch_array将结果行作为关联数组、数字数组或两者获取

警告

此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中移除。相反,应使用 MySQLiPDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南。此函数的替代方法包括

描述

mysql_fetch_array(resource $result, int $result_type = MYSQL_BOTH): array

返回与获取的行相对应的数组,并将内部数据指针向前移动。

参数

result

要评估的结果 resource。此结果来自对 mysql_query() 的调用。

result_type

要获取的数组类型。它是一个常量,可以取以下值:MYSQL_ASSOCMYSQL_NUMMYSQL_BOTH

返回值

返回一个字符串数组,该数组对应于获取的行,如果不再有行,则返回 false。返回的数组类型取决于 result_type 的定义方式。通过使用 MYSQL_BOTH(默认值),您将获得一个包含关联索引和数字索引的数组。使用 MYSQL_ASSOC,您只获得关联索引(就像 mysql_fetch_assoc() 的工作原理一样),使用 MYSQL_NUM,您只获得数字索引(就像 mysql_fetch_row() 的工作原理一样)。

如果结果的两个或多个列具有相同的字段名,则最后一个列将优先。要访问相同名称的其他列,必须使用该列的数字索引或为该列创建别名。对于带别名的列,您不能使用原始列名访问其内容。

示例

示例 #1 带有别名重复字段名的查询

SELECT table1.field AS foo, table2.field AS bar FROM table1, table2

示例 #2 mysql_fetch_array() 使用 MYSQL_NUM

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"无法连接: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_NUM)) {
printf("ID: %s Name: %s", $row[0], $row[1]);
}

mysql_free_result($result);
?>

示例 #3 mysql_fetch_array() 使用 MYSQL_ASSOC

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"无法连接: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf("ID: %s Name: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);
?>

示例 #4 mysql_fetch_array() 使用 MYSQL_BOTH

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"无法连接: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}

mysql_free_result($result);
?>

注释

注意性能

需要注意的重要一点是,使用 mysql_fetch_array() 并不显著比使用 mysql_fetch_row() 慢,而它提供了显著的附加值。

注意此函数返回的字段名区分大小写

注意此函数将 NULL 字段设置为 PHP null 值。

参见

添加注释

用户贡献注释 31 个注释

robjohnson at black-hole dot com
22 年前
在包含 38567 行的表上的基准测试

mysql_fetch_array
MYSQL_BOTH:6.01940000057 秒
MYSQL_NUM:3.22173595428 秒
MYSQL_ASSOC:3.92950594425 秒

mysql_fetch_row:2.35096800327 秒
mysql_fetch_assoc:2.92349803448 秒

如您所见,获取数组或哈希表效率是获取两者的两倍。使用 fetch_row 比传递 fetch_array MYSQL_NUM 效率更高,或者使用 fetch_assoc 比 fetch_array MYSQL_ASSOC 效率更高。除非您确实需要它们,否则不要获取 BOTH,而且大多数时候您不需要。
KingIsulgard
15 年前
我找到了一种方法,可以在一行代码中将 select 查询的所有结果都放入一个数组中。

// 读取记录
$result = mysql_query("SELECT * FROM table;") or die(mysql_error());

// 将它们放入数组中
for($i = 0; $array[$i] = mysql_fetch_assoc($result); $i++) ;

// 删除最后一个空数组元素
array_pop($array);

你需要删除最后一个元素,因为它总是为空的。

这样,你可以轻松地将整个表格读取到一个数组中,并保留表格列的键。非常方便。
puzbie at facebookanswers dot co dot uk
12 年前
<?php
while($r[]=mysql_fetch_array($sql));
?>

是的,这将生成一个包含最终 mysql_fetch_array 的 false 的虚拟数组元素。你应该截断数组,或者(在我看来更明智地)在将其添加到数组之前检查 mysql_fetch_array 的结果是否为 false。
mehdi dot haresi at gmail dot com
15 年前
对于所有在查询中使用表别名访问重复字段名时遇到问题的用户,我已经实现了以下快速解决方案。

<?php
function mysql_fetch_alias_array($result)
{
if (!(
$row = mysql_fetch_array($result)))
{
return
null;
}

$assoc = Array();
$rowCount = mysql_num_fields($result);

for (
$idx = 0; $idx < $rowCount; $idx++)
{
$table = mysql_field_table($result, $idx);
$field = mysql_field_name($result, $idx);
$assoc["$table.$field"] = $row[$idx];
}

return
$assoc;
}
?>

假设我们有两个表 student 和 contact,它们都包含 fID 作为索引字段,并且想在 php 中访问这两个 fID 字段。

此函数的使用方式与调用 mysql_fetch_array 非常相似。

<?php
$result
= mysql_query("select * from student s inner join contact c on c.fID = s.frContactID");

while (
$row = mysql_fetch_alias_array($result))
{
echo
"StudenID: {$row['s.fID']}, ContactID: {$row['c.fID']}";
}
?>

就是这样!

请注意,使用此函数时,你必须使用它们的别名 (例如 s.Name, s.Birhtday) 访问所有字段,即使它们没有重复。

如果你有任何问题,请发邮件给我。

此致
Mehdi Haresi
die-webdesigner.at
final at skilled dot ch
13 年前
当我在生成动态查询后必须确定结果集是否包含特定字段时,我遇到了 MySQL NULL 值的麻烦。

第一直觉是使用 isset() 和 is_null(),但这些函数的行为可能与你预期的不同。

最后我使用了 array_key_exists,因为它是唯一可以告诉我键是否存在的函数。

<?php
$row
= mysql_fetch_assoc(mysql_query("SELECT null as a"));
var_dump($row); //array(1) { ["a"]=> NULL }
var_dump(isset($row['a'])); //false
var_dump(isset($row['b'])); //false
var_dump(is_null($row['a'])); //true
var_dump(is_null($row['b'])); //true + throws undefined index notice
var_dump(array_key_exists('a', $row)); // true
var_dump(array_key_exists('b', $row)); // false
?>
john at skem9 dot com
18 年前
我的主要目的是将获取的数组显示在一个表格中,将结果并排显示,而不是彼此下方,以下是我想出的方法。

只需将 $display 数字更改为所需的列数,不要更改 $cols 数字,否则可能会遇到一些问题。

<?php
$display
= 4;
$cols = 0;
echo
"<table>";
while(
$fetched = mysql_fetch_array($result)){
if(
$cols == 0){
echo
"<tr>\n";
}
// 在这里放置你想在每个单元格中显示的内容
echo "<td>".$fetched['id']."<br />".$fetched['name']."</td>\n";
$cols++;
if(
$cols == $display){
echo
"</tr>\n";
$cols = 0;
}
}
// 添加以下内容以显示正确的 html
if($cols != $display && $cols != 0){
$neededtds = $display - $cols;
for(
$i=0;$i<$neededtds;$i++){
echo
"<td></td>\n";
}
echo
"</tr></table>";
} else {
echo
"</table>";
}
?>

希望这能为你们节省一些搜索时间。

任何对此的改进都将非常棒!
joey at clean dot q7 dot com
20 年前
NULL 字段的问题似乎不再是问题(至少在 4.2.2 版本中)。mysql_fetch_* 现在似乎完全填充了数组,并在数据库返回 NULL 值时放入值为 NULL 的条目。这当然是我预期的行为,所以当我看到这里的说明时我很担心,但测试表明它确实按照我的预期工作。
hanskrentel at yahoo dot de
21 年前
对于关联数组中包含 NULL 值的字段的问题,请随时使用此函数。我已经没有遇到过问题了,只需将其放入你的脚本中即可。

/*
* mysql_fetch_array_nullsafe
*
*
* 以枚举和关联数组的形式获取结果行
* ! nullsafe !
*
* 参数:$result
* $result:有效的数据库结果 ID
*
* 返回:数组 | false (mysql:如果有更多行)
*
*/
function mysql_fetch_array_nullsafe($result) {
$ret=array();

$num = mysql_num_fields($result);
if ($num==0) return $ret;

$fval = mysql_fetch_row ($result);
if ($fval === false) return false;

$i=0;
while($i<$num)
{
$fname[$i] = mysql_field_name($result,$i);
$ret[$i] = $fval[$i]; // 枚举
$ret[''.$fname[$i].''] = $fval[$i]; // 关联
$i++;
}

return $ret;
}
info at o08 dot com
15 年前
与 mysql_fetch_array 相反

<?php
function mysql_insert_array ($my_table, $my_array) {
$keys = array_keys($my_array);
$values = array_values($my_array);
$sql = 'INSERT INTO ' . $my_table . '(' . implode(',', $keys) . ') VALUES ("' . implode('","', $values) . '")';
return(
mysql_query($sql));
}
#http://www.weberdev.com/get_example-4493.html
?>
romans at servidor dot unam dot mx
19 年前
关于查询中重复的字段名,我想找一种无需使用别名就能检索行的方法,所以我写了这个类来将行返回为二维数组。

<?
$field = $drow['table']['column'];
?>

以下是代码

<?
class mysql_resultset
{
var $results, $map;

function mysql_resultset($results)
{
$this->results = $results;
$this->map = array();

$index = 0;
while ($column = mysql_fetch_field($results))
{
$this->map[$index++] = array($column->table, $column->name);
}
}

function fetch()
{
if ($row = mysql_fetch_row($this->results))
{
$drow = array();

foreach ($row as $index => $field)
{
list($table, $column) = $this->map[$index];
$drow[$table][$column] = $row[$index];
}

return $drow;
}
else
return false;
}
}
?>

这个类使用 mysql_query 结果进行初始化

<?
$resultset = new mysql_resultset(mysql_query($sql));
?>

构造函数构建一个数组,将每个字段索引映射到一个 ($table, $column) 数组,这样我们就可以使用 mysql_fetch_row 并通过索引在 fetch() 方法中访问字段值。然后,这个方法使用该映射来构建二维数组。

一个例子

<?
$sql =
"select orders.*, clients.*, productos.* ".
"from orders, clients, products ".
"where join conditions";

$resultset = new mysql_resultset(mysql_query($sql));

while ($drow = $resultset->fetch())
{
echo 'No.: '.$drow['orders']['number'].'
';
echo 'Client: '.$drow['clients']['name'].'
';
echo 'Product: '.$drow['products']['name'].'
';
}
?>

我希望其他人能像我一样发现它有用。
kunky at mail dot berlios dot de
18 年前
当使用以下查询时,这非常有用

`SHOW TABLE STATUS`

不同版本的 MySQL 对此有不同的响应。

因此,最好使用 mysql_fetch_array(),因为 mysql_fetch_row() 给出的数字引用会产生非常不同的结果。
Tristan
15 年前
以下是一种更快地克隆记录的方法。只需 3 行代码,而不是 4 行。但该表必须具有自动递增的 id。
我从 Tim 的代码中借鉴并修改了它。感谢 Tim。

<?php
// 复制要克隆的记录的内容
$entity = mysql_fetch_array(mysql_query("SELECT * FROM table_name WHERE id='$id_to_be cloned'"), MYSQL_ASSOC) or die("Could not select original record");

// 将自动递增的 id 的值设置为空白。如果你忘记了这一步,什么都不会起作用,因为我们不能有两个具有相同 id 的记录
$entity["id"] = "";

// 插入原始记录的克隆副本
mysql_query("INSERT INTO table_name (".implode(", ",array_keys($entity)).") VALUES ('".implode("', '",array_values($entity))."')");

// 如果你想要新克隆记录的自动生成的 id,请执行以下操作
$newid = mysql_insert_id();
?>

就是这样。
maileremi at gmail dot com
13 年前
将表放入数组的简单方法...

<?php
//= 查询 ========================//
$sql=mysql_query("select * from table1");

//= 关闭 while ====================//
/*每次获取行时,都将其添加到数组...*/
while($r[]=mysql_fetch_array($sql));

echo
"<pre>";
//= 打印 $r 作为数组 =================//
print_r ($r);
//=============================//
echo "</pre>";
?>
dkantha at yahoo dot com
21 年前
我发现 'jb at stormvision' 的代码在上面很有用,但你需要的不是行数,而是字段数;否则你会遇到错误。

因此,它应该如下所示

$result=mysql_query("select * from mydata order by 'id'")or die('died');
$num_fields = mysql_num_fields($result);
$j=0;
$x=1;
while($row=mysql_fetch_array($result)){
for($j=0;$j<$num_fields;$j++){
$name = mysql_field_name($result, $j);
$object[$x][$name]=$row[$name];
}$x++;
}

在脚本中的后面,你可以使用下面的数组来访问你的数据

$i=1;
$ii=count($object); // 快速访问函数
for($i=1;$i<=$ii;$i++){
echo $object[$i]['your_field_name'];
}

我已经在我的应用程序中测试过这个,它运行良好!:-)
buddy at databoysoftware dot com
15 年前
在 Typer85 录入的关于使用 mysql_data_seek() 的说明中,应该注意,它有两个参数,两个参数都是必需的。

如果你已经遍历了结果数组(例如,使用 mysql_fetch_array()),并且需要从顶部开始,那么正确的语法是

mysql_data_seek({result set},{record#})

例如
mysql_data_seek($result,0)
("0" 代表数组中的第一条记录。)

这将重置你的结果,使其回到数组的顶部,以便你可以重新处理
while($row = mysql_fetch_array($result)) 或其他数组处理。
eddie at nailchipper dot com
18 年前
mob AT stag DOT ru 为从 MySQL 获取简单数组提供了一个很好的函数,但它存在一个严重的错误。当没有提供链接时,作为参数设置的 MySQL 链接为 NULL,这意味着你将 NULL 作为链接传递给 mysql 函数,这是错误的。我没有使用多个连接,因此我删除了链接并使用全局链接。如果你想支持多个链接,请先检查它是否已设置。

/*
* 要支持多个链接,请将 $link 参数添加到函数中,然后
* 在使用链接之前对其进行测试
*
* if(isset($link))
* if($err=mysql_errno($link))return $err;
* 否则
* if($err=mysql_errno())return $err;
*/

function mysql_fetch_all($query){
$r=@mysql_query($query);
if($err=mysql_errno())return $err;
if(@mysql_num_rows($r))
while($row=mysql_fetch_array($r))$result[]=$row;
return $result;
}
function mysql_fetch_one($query){
$r=@mysql_query($query);
if($err=mysql_errno())return $err;
if(@mysql_num_rows($r))
return mysql_fetch_array($r);
}
noagbodjivictor at gmail dot com
16 年前
对先前函数的小幅改进。

function mysql_fetch_rowsarr($result, $numass=MYSQL_BOTH) {
$got = array();

if(mysql_num_rows($result) == 0)
return $got;

mysql_data_seek($result, 0);

while ($row = mysql_fetch_array($result, $numass)) {
array_push($got, $row);
}

return $got;
}
Ben
20 年前
人们使用此函数时最常见的错误之一是,在同一个脚本中多次使用此函数时,他们忘记使用 mysql_data_seek() 函数来重置内部数据指针。

当遍历 MySQL 结果的数组时,例如

<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach (
$line as $col_value) {
echo
$col_value . '<br />';
}
}
?>

数组的内部数据指针会增量前进,直到数组中没有更多元素为止。因此,基本上,如果你在一个脚本中两次复制/粘贴上面的代码,那么第二次复制将不会产生任何输出。原因是数据指针已经前进到 $line 数组的末尾,并且在这样做时返回了 FALSE。

如果出于某种原因,你想要第二次遍历数组,也许是从同一个结果集中获取不同的数据,那么你必须确保调用

<?php
mysql_data_seek
($result, 0);
?>

这个函数会重置指针,你可以再次遍历 $line 数组!
Anonymous
12 年前
如果我使用

<?php
while($r[]=mysql_fetch_array($sql));
?>

那么,在数组 $r 中,比数据库返回的行多一个条目。
barbieri at NOSPAMzero dot it
22 年前
以下是一项解决 NULL 值问题的建议

// 获取关联数组,并设置 NULL 值
$record = mysql_fetch_array($queryID,MYSQL_ASSOC);

// 设置数字索引
if(is_array($record))
{
$i = 0;
foreach($record as $element)
$record[$i++] = $element;
}

这样,你就可以像往常一样访问 $result 数组,并设置 NULL 字段。
tslukka at cc dot hut dot fi
21 年前
如果你认为 MySQL(或其他)数据库
处理很困难,需要很多
代码,我建议你尝试 http://titaniclinux.net/daogen/

DaoGen 是一个程序源代码生成器
支持 PHP 和 Java。它使数据库
编程快速便捷。生成的源代码
在 GPL 下发布。
glenn dot hoeppner at yakhair dot com
21 年前
只是针对具有重复名称的列的另一种解决方法...

修改你的 SQL 以使用 AS 关键字。

不要使用
$sql = "SELECT t1.cA, t2.cA FROM t1, t2 WHERE t1.cA = t2.cA";

请尝试使用
$sql = "SELECT t1.cA AS foo1, t2.cA AS foo2 FROM t1, t2 WHERE t1.cA = t2.cA";

然后,你可以在数组中按名称引用结果
$row[foo1], $row[foo2]
joelwan at gmail dot com
18 年前
请尝试使用 Php Object Generator:http://www.phpobjectgenerator.com

它有点类似于 Daogen,这是在上面评论中提到的,但更简单易用。

Php Object Generator 为您的 Php 对象生成 Php 类。它还提供数据库类,因此您可以专注于项目的更重要方面。希望这有帮助。
tim at wiltshirewebs dot com
18 年前
以下是用仅 4 行代码将记录复制或克隆到同一表中的快速方法

// 首先,获取最高的 id 号,这样我们就可以计算出副本的新 id 号
// 其次,获取原始实体
// 第三,将副本记录的 id 加 1,超过最大值
// 最后插入新记录 - 瞧 - 4 行!

$id_max = mysql_result(mysql_query("SELECT MAX(id) FROM table_name"),0,0) or die("Could not execute query");
$entity = mysql_fetch_array(mysql_query("SELECT * FROM table." WHERE id='$id_original'),MYSQL_ASSOC) or die("Could not select original record"); // MYSQL_ASSOC 强制使用纯关联数组并阻止双键重复,至关重要的是,它将键提取出来以便可以在第 4 行中使用
$entity["id"]=$id_max+1;
mysql_query("INSERT INTO it_pages (".implode(", ",array_keys($Entity)).") VALUES ('".implode("', '",array_values($Entity))."')");

我真的很努力地想破解这个问题 - 也许有更简单的解决方法?感谢其他发帖人提供的灵感。祝你好运 - Tim
some at gamepoint dot net
22 年前
我从未遇到过如此多的空字段问题,但我理解 extract 仅在使用关联数组时按预期工作,这与前一个注释中使用的 mysql_fetch_assoc() 一致。

但是,mysql_fetch_array 将使用数字和关联键返回字段值,数字键是 extract() 无法很好处理的键。
您可以通过调用 mysql_fetch_array($result,MYSQL_ASSOC) 来防止这种情况,它将返回与 mysql_fetch_assoc 相同的结果,并且 extract() 友好。
mob AT stag DOT ru
19 年前
我编写了一些实用程序函数来提高可用性和可读性,并在我的代码中无处不在使用它们。我认为它们可以提供帮助。

function mysql_fetch_all($query,$MySQL=NULL){
$r=@mysql_query($query,$MySQL);
if($err=mysql_errno($MySQL))return $err;
if(@mysql_num_rows($r))
while($row=mysql_fetch_array($r))$result[]=$row;
return $result;
}
function mysql_fetch_one($query,$MySQL=NULL){
$r=@mysql_query($query,$MySQL);
if($err=mysql_errno($MySQL))return $err;
if(@mysql_num_rows($r))
return mysql_fetch_array($r);
}

示例用法
if(is_array($rows=mysql_fetch_all("select * from sometable",$MySQL))){
// 做点什么
}else{
if(!is_null($rows)) die("Query failed!");
}
Amine O
13 年前
如果您对 mysql_fetch_array 的返回值使用 implode(),如果您在参数 2 上使用 MYSQL_BOTH,结果将不是您所期望的。
例如
我的 sql 数据库包含“Amine, Sarah, Mohamed”;

$array = mysql_fetch_array($resource,MYSQL_BOTH);
或 $array = mysql_fetch_array($resource);
echo implode(" - ", $array);

结果是:Amine-Amine-Sarah-Sarah-Mohamed-Mohamed
我们只期望:Amine-Sarah-Mohamed

您必须在参数 2 上使用 MYSQL_NUM 或 MYSQL_ASSOC 来解决问题。
juancri at tagnet dot org
21 年前
使用 mysql_fetch_array() 的示例

$result = mysql_query("SELECT name FROM table WHERE id=8");
$array = mysql_fetch_array($result);

$array 将是

array ([0] => "John", ['name'] => "John")

然后您可以访问结果

echo "The name is " . $array[0];
// 或者
echo "The name is " . $array['name'];

但数组不是引用的。$array[0] 不是对 $array['name'] 或 $array['name'] 对 $array[0] 的引用,它们之间没有关系。因此,系统将使用过多的内存。对于大型列,请尝试仅使用 mysql_fetch_assoc() 或 mysql_fetch_row()。
mjm at porter dot appstate dot edu
22 年前
如果您执行一个返回具有重复名称的不同列的 SELECT 查询,例如

--------
$sql_statement = "SELECT tbl1.colA, tbl2.colA FROM tbl1 LEFT JOIN tbl2 ON tbl1.colC = tbl2.colC";

$result = mysql_query($sql_statement, $handle);

$row = mysql_fetch_array($result);
--------

然后

$row[0] 等效于 $row["colA"]



$row[1] 不等效于 $row["colA"]。

故事的寓意:如果您列名不唯一,即使它们来自 JOIN 中的不同表,也必须对结果行数组使用数字索引。这将使 mysql_fetch_assoc() 变得无用。

[编者注 - 或者您可以像往常一样执行“select tbl1.colA as somename, tbl2.colA as someothername...”,这将消除问题。-- Torben]
scott_carney at hotmail dot com
12 年前
我只是想分享一下我用来简化查询结果处理的这些辅助函数
<?php
// 对于应该返回单个值的简单查询,这仅返回该值(或 FALSE),因此您可以立即对其进行处理
function db_result_single($result) {
return (
$row = mysql_fetch_row($result)) && isset($row[0]) ? $row[0] : false;
}

// 将行作为行数组返回
// 提供 key_column 使您可以访问特定行(例如,如果 (isset($result_array[$user_id])) ...)
function db_result_array($result, $key_column = null) {
for (
$array = array(); $row = mysql_fetch_assoc($result); isset($row[$key_column]) ? $array[$row[$key_column]] = $row : $array[] = $row);
return
$array;
}

// 返回单个数据列的数组,可以选择从第二列进行键值映射(例如,按用户 ID 键值映射的用户姓名数组)
function db_result_array_values($result) {
for (
$array = array(); $row = mysql_fetch_row($result); isset($row[1]) ? $array[$row[1]] = $row[0] : $array[] = $row[0]);
return
$array;
}
?>

当然,欢迎您进行评论[发送到我的电子邮件,而不是在这里]。
Typer85 at gmail dot com
17 年前
请注意,您传递给此函数的资源结果可以被认为是按引用传递的,因为资源只是一个指向内存位置的指针。

因此,您不能在同一个脚本中两次循环遍历资源结果,除非将指针重置回起始位置。

例如

----------------
<?php

// 假设我们已经查询了我们的数据库。

// 循环遍历结果集。

while( $queryContent = mysql_fetch_row( $queryResult ) {

// 显示。

echo $queryContent[ 0 ];
}

// 我们已经循环遍历了资源结果,因此指针不再指向任何行。

// 如果我们决定再次循环遍历同一个资源结果
// ,该函数将始终返回 false,因为它
// 将假定没有更多行。

// 因此,以下代码(如果在上一段代码之后执行)
// 段落将无法工作。

while( $queryContent = mysql_fetch_row( $queryResult ) {

// 显示。

echo $queryContent[ 0 ];
}

// 因为 $queryContent 现在等于 FALSE,所以循环
// 不会进入。

?>
----------------

解决此问题的唯一方法是将指针重置以使其再次指向第一行,因此完整的代码将如下所示

----------------
<?php

// 假设我们已经查询了我们的数据库。

// 循环遍历结果集。

while( $queryContent = mysql_fetch_row( $queryResult ) {

// 显示。

echo $queryContent[ 0 ];
}

// 重置我们的指针。

mysql_data_seek( $queryResult );

// 再次循环。

while( $queryContent = mysql_fetch_row( $queryResult ) {

// 显示。

echo $queryContent[ 0 ];
}

?>
----------------

当然,您必须进行额外的检查以确保结果中的行数不为 0,否则 mysql_data_seek 本身将返回 false 并且会引发错误。

另外请注意,这适用于所有获取结果集的函数,包括 mysql_fetch_row、mysql_fetch_assos 和 mysql_fetch_array。
To Top