我正在学习当前的php / mysql,我对此感到困惑。
经过一些人头疼之后,我发现mysql_fetch_array会记住它上次访问哪一行并访问下一行。 (我最初试图弄清楚代码是如何在示例代码中与它进行通信的)
所以对于数据库:
parent | job
-------+-------------
mom | receptionist
-------+-------------
dad | taxi driver
代码
mysql_fetch_array($result)[job]
第一次返回'接待员',第二次返回'出租车司机'。
感谢
答案 0 :(得分:2)
答案 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
子句,所以它默认按照它们插入表中的顺序返回行。