现在使用PHP/MySQL一段时间了,我想知道使用mysql_fetch_object()
vs mysql_fetch_assoc()
/ 是否有任何特定的优点(性能或其他)mysql_fetch_array()
.
在性能方面,使用什么并不重要.区别在于mysql_fetch_object返回对象:
while ($row = mysql_fetch_object($result)) { echo $row->user_id; echo $row->fullname; }
mysql_fetch_assoc()返回关联数组:
while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["fullname"]; }
和mysql_fetch_array()返回数组:
while ($row = mysql_fetch_array($result)) { echo $row[0]; echo $row[1] ; }
mysql_fetch_array
使您的代码难以阅读=维护噩梦.您无法一目了然地看到您的对象正在处理哪些数据.它稍微快一点,但如果这对你来说很重要,那么你正在处理如此多的数据,以至于PHP可能不是正确的方法.
mysql_fetch_object
有一些缺点,特别是如果你基于db层.
列名可能不是有效的PHP标识符,例如,tax-allowance
或者user.id
您的数据库驱动程序为您提供查询中指定的列名.然后你必须开始在{}
所有地方使用.
如果你想根据它的名字得到一个列,在某个变量中加入你也必须开始使用变量属性$row->{$column_name}
,而数组语法$row[$column_name]
如果指定了类名,则可能会在调用时调用构造函数.
如果你没有指定你得到的类名,那么stdClass
无论如何都不比数组好.
mysql_fetch_assoc
是三个中最容易使用的,我喜欢它在对象和数据库结果行之间的代码中给出的区别......
$object->property=$row['column1']; $object->property=$row[$column_name]; foreach($row as $column_name=>$column_value){...}
虽然许多OOP粉丝(我是OOP粉丝)喜欢将所有内容都变成对象的想法,但我觉得关联数组是数据库中一行比一个对象更好的模型,因为在我看来,一个对象是一个具有处理它们的方法的属性集,而行只是数据,应该如此处理而不会进一步复杂化.
要记住的事情:数组可以很容易地添加到内存缓存(eaccelerator,XCache,..),而对象则不能(它们需要在每次检索时存储和反序列化时进行序列化!).
当您想要添加内存缓存支持时,您可以切换到使用数组而不是对象 - 但到那时您可能必须更改很多代码,这些代码使用以前使用的对象类型返回值.