mysql_fetch_array、mysql_fetch_assoc、mysql_fetch_object
Posted
技术标签:
【中文标题】mysql_fetch_array、mysql_fetch_assoc、mysql_fetch_object【英文标题】:mysql_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。
但是人们对于哪个最好用,为什么,以及它们最适合在哪种情况下使用的看法是什么。
感谢您的意见!
【问题讨论】:
据此,assoc 是最快的。 spearheadsoftwares.com/tutorials/php-performance-benchmarking/… 这是个有趣的数据,但如果你只是快速看一下图表,似乎只有 >= 100000 的数据集存在差异。但这只是一个糟糕的规模选择。如果您详细查看这些值,则 fetch_assoc 在所有尺寸上都比 fetch_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_assoc
和mysql_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)
mysqli_fetch_object(数据可以作为对象获取)
while ($obj = mysqli_fetch_object($result))
printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
mysqli_fetch_assoc(获取关联数组,即键)
while ($row = mysqli_fetch_assoc($result))
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
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
【讨论】:
以上是关于mysql_fetch_array、mysql_fetch_assoc、mysql_fetch_object的主要内容,如果未能解决你的问题,请参考以下文章
mysql_fetch_array() 期望参数 1 是资源问题 [重复]
从mysql转换为mysqli(mysql_fetch_array)[重复]
php while循环和foreach循环 mysql_fetch_array()
什么改变了循环中的条件:while (mysql_fetch_array($var))?