(php)mysql_fetch_array - 它如何知道要访问哪一行

时间:2010-12-15 11:54:12

标签: php mysql

我正在学习当前的php / mysql,我对此感到困惑。

经过一些人头疼之后,我发现mysql_fetch_array会记住它上次访问哪一行并访问下一行。 (我最初试图弄清楚代码是如何在示例代码中与它进行通信的)

所以对于数据库:

parent | job
-------+-------------
mom    | receptionist
-------+-------------
dad    | taxi driver

代码

mysql_fetch_array($result)[job] 

第一次返回'接待员',第二次返回'出租车司机'。

  • 在哪里/如何跟踪这个?
  • 如果我不想按顺序访问它们会怎样?

感谢

7 个答案:

答案 0 :(得分:2)

  • PHP中的内部实现。不要试图弄明白;)
  • 如果您想要不同的订单,请在数据库查询中指定它。

答案 1 :(得分:2)

  

在哪里/如何跟踪这个?

mySQL服务器有一个内部结果指针。在某些数据库/包装器/库中,您可以回滚该指针,但据我所知,这在mysql_*函数库中是不可能的。

  

如果我不想按顺序访问它们会怎样?

您必须以某些顺序访问它们。唯一的替代方法是将所有行提取到数组中:然后您可以随机访问每一行。

如果要更改记录的顺序,请使用ORDER子句在查询中执行此操作。

像PDO这样的一些数据库包装器有一个fetchAll()方法就是这样做的。对于大型结果集,这可能是内存密集型并且会破坏脚本的内存限制,这就是为什么它通常不会这样做。

答案 2 :(得分:1)

还有另一种方法可以解决这个问题。

如果你想知道你怎么能做出能够完成这个功能的功能。方法如下:

<?php
function count_off()
{
static $count = 1;
echo $count++;
}

count_off();
count_off();
count_off();
count_off();
count_off();
?>

以上将输出12345

我应该提一下。没有充分理由你不应该这样做。在调试时很难跟踪。

答案 3 :(得分:0)

如果要以不同的顺序访问它们,请在SQL中使用ORDER BY子句来更改从数据库中检索结果的顺序。

答案 4 :(得分:0)

mysql_fetch_array的结果始终是查询的下一个结果/行(首先是第一行关闭) 实习生将保留一个指针,指示它是如何获取的。

如果要以备用顺序获取它们,则必须在查询中定义它们。 如上所述,结果将始终按查询指定的顺序(隐式或显式)

答案 5 :(得分:0)

mysql_fetch_array()函数按照MySQL从您提供的查询中返回的顺序从数据库中获取一行行。

要获取所有行,可以将该函数放入循环中。

while($row = mysql_fetch_array($result)) {
    echo $row["job"];
}

这将输出:

receptionist
taxi driver

您可以使用sql术语order by更改订单,该术语可以按字母顺序或数字顺序按特定列排序结果

select * from parent order by job

以上查询将按父作业字段的字母顺序排序结果(靠近A的结果将在mysql_fetch_*

中排在第一位

答案 6 :(得分:0)

如果你写了这样的典型代码:

$result = mysql_query("SELECT parent, job FROM table");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo $row['parent'] . ' - ' . $row['job'];
}

每次调用mysql_fetch_array()时,如果结果中有另一行,它会将该行作为关联数组返回到$row变量中。否则,它将返回false,并且while循环的执行将结束。

另外,因为您没有指定ORDER BY子句,所以它默认按照它们插入表中的顺序返回行。