【问题标题】:PHP SQL Array loopingPHP SQL 数组循环
【发布时间】:2013-01-19 20:34:00
【问题描述】:

我最近一直在使用相当多的 PHP,虽然我通常觉得它很有趣而且相当轻松,但我担心我可能会偶然发现一个很多人似乎讨厌它的怪癖.

考虑一下:

while($row = mysql_fetch_array($result))
{
    //Do something with $row...
}

...其中 $result 是一个 mysql_query,例如:

从人中选择姓名、年龄

每次循环执行时,$row 都会引用返回结果中的不同行。

我从来不知道 while(... 语句在它检查的条件为真时执行除执行之外的任何操作的语言,我可以看到上面的内容会如何做...但我不能看看 while 循环如何导致它迭代 获取数组的索引。

这仅仅是 PHP 的一个奇怪的怪癖,还是 mysql_fetch_array 返回的对象每次被引用时都会增加/拼接自己?

我了解它的工作原理,所以我可以在我的代码中使用它,但我不明白为什么而且我不喜欢死记硬背 - 如果有人能解释一下,我会非常感谢。

【问题讨论】:

  • 请切换到 MySQLi 或 PDO。这些方法已被贬值。 :) See PHP Page on mysql functions
  • 啊,好吧,我不得不从头开始用 PHP 弄清楚 SQL,我发现的所有 tuts 都使用了 mysql_ 方法。我会试试 PDO,谢谢你的提示!

标签: php mysql sql arrays while-loop


【解决方案1】:

mysql_fetch_array 每次被引用时返回的对象自增/拼接

你是对的。出于某种原因,在此特定功能的手册参考中没有这样说,但让我们看一下非常相似的参考mysql_fetch_row http://www.php.net/manual/en/function.mysql-fetch-row.php

引用参考:

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

内部数据指针向前移动后,再次调用该函数将获取下一行。此行为与while 本身无关。您也可以在连续的行中多次调用该函数。

这种行为其实很常见。考虑使用类似于fread 的 API 从文件中读取。每次阅读时,您都会收到下一个数据块。这也是使用内部数据指针实现的,也称为游标。

【讨论】:

  • 啊当然!我之前在 AS3 中使用过 ByteArrays,我应该认为它以相同的方式工作,但找不到太多关于它的信息,现在猜“while”循环是有道理的,但它误导了我 - 非常感谢!
  • 我喜欢 php,但个人认为在 while 语句中进行赋值很恶心 :) 您可以轻松地重写以避免它,并使代码更具可读性
猜你喜欢
  • 2011-06-09
  • 2012-02-21
  • 2017-07-26
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多