【问题标题】:mysql_fetch_array, mysql_fetch_assoc, mysql_fetch_objectmysql_fetch_array、mysql_fetch_assoc、mysql_fetch_object
【发布时间】:2010-12-04 22:35:54
【问题描述】:

功能都非常相似:

mysql_fetch_array(), mysql_fetch_assoc(), mysql_fetch_object()

我最近开始使用 mysql_fetch_object,因为我正在使用 PHP 做更多的 OOP。

但是人们对于哪个最好用,为什么,以及它们最适合在哪种情况下使用的看法是什么。

感谢您的意见!

【问题讨论】:

  • 这是个有趣的数据,但如果你只是快速看一下图表,似乎只有 >= 100000 的数据集存在差异。但这只是一个糟糕的规模选择。如果您详细查看这些值,则 fetch_assoc 在所有尺寸上都比 fetch_object 快两倍以上。

标签: php mysql arrays oop object


【解决方案1】:

mysql_fetch_array 将为您提供一个可以作为键的数组:

  • 列的编号和名称,如果使用MYSQL_BOTH
  • 列名,使用MYSQL_ASSOC——在这种情况下,你会得到与使用mysql_fetch_assoc相同的东西
  • 只有数字(取决于查询中列的顺序),如果使用MYSQL_NUM

获取按列名索引的结果可能是最有用的解决方案——至少更易于使用。

但是在一种情况下获取由 select 子句中的字段位置索引的结果很有趣:当您有多个具有相同名称或别名的列时。
在这种情况下,由于数组中不能有两个具有相同索引的条目,因此您只能使用列名作为索引来访问其中一个列。
对于具有相同名称的其他列,您必须使用数字索引。

这种情况可能是我会使用mysql_fetch_array 的唯一情况——而且我更喜欢在查询中使用别名以避免这种情况——我认为这更清楚。


mysql_fetch_assoc 将为您提供一个数组,其中列名作为键,数据作为值。

其实没什么好说的。


mysql_fetch_object 会得到你的对象作为回报。


mysql_fetch_assocmysql_fetch_object 之间进行选择很可能取决于您开发应用程序的方式:如果在任何地方都使用对象,那么第二个可能最适合。

如果使用数组作为数据容器,你可以直接使用第一个。

【讨论】:

    【解决方案2】:

    mysql_fetch_array() 将结果行作为关联数组、数值数组或两者兼而有之。 它返回对应于获取的行的字符串数组,如果没有更多行,则返回 FALSE。返回数组的类型取决于 $result_type 的定义方式。

    通过使用 MYSQL_NUM,您只能获得数字索引(如 $row[0]、$row1 等),即数字数组。

    通过使用 MYSQL_ASSOC,您只能获得关联索引(如 $row["id"]、$row["name"] 等),即关联数组。

    通过使用 MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。 (如 $row[0]、$row["name"] 等),即数值数组和关联数组。

    mysql_fetch_assoc() 获取结果行作为关联数组。 (列名作为键)。

    mysql_fetch_object() 将结果行作为对象提取。

    它返回一个对象,该对象的属性对应于获取的行,并将内部数据指针向前移动。

    对我来说,使用有好处 mysql_fetch_assoc() 可以使用数组函数,例如 array_walk 和 uasort()。

    【讨论】:

      【解决方案3】:

      假设我们有下表

      姓名 国家代码 ----- ---------- 孟加拉国 BD 美国普韦布洛 美国阿瓦达

      $query = "SELECT Name, CountryCode FROM City";

      $result = mysqli_query($connection, $query)

      1. mysqli_fetch_object(数据可以作为对象获取)

         while ($obj = mysqli_fetch_object($result)) {
            printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
         }
        
      2. mysqli_fetch_assoc(获取关联数组,即键)

        while ($row = mysqli_fetch_assoc($result)) { printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]); }

      3. mysqli_fetch_array(数字和关联两者)

        while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) { printf("%s (%s)\n", $row[0], $row[1]); }

        while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { printf("%s (%s)\n", $row["Name"], $row["CountryCode"]); }

      【讨论】:

        【解决方案4】:

        简短说明:

        mysql_fetch_assoc():这将为您提供一个关联的数据数组。

        mysql_fetch_array() :这将返回关联元素的组合数组以及具有数字索引的数据。

        mysql_fetch_object():返回一个对象,其属性对应于获取的行。

        Source

        【讨论】:

          猜你喜欢
          • 2012-07-13
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多