当前位置:  开发笔记 > 编程语言 > 正文

Mysql导致PHP - 数组或对象?

如何解决《Mysql导致PHP-数组或对象?》经验,为你挑选了3个好方法。

现在使用PHP/MySQL一段时间了,我想知道使用mysql_fetch_object()vs mysql_fetch_assoc()/ 是否有任何特定的优点(性能或其他)mysql_fetch_array().



1> Vertigo..:

在性能方面,使用什么并不重要.区别在于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] ;
}


小差异,_row返回0,1 ..和_array返回'userid','fullname','0','1'.

2> 小智..:

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粉丝)喜欢将所有内容都变成对象的想法,但我觉得关联数组是数据库中一行比一个对象更好的模型,因为在我看来,一个对象是一个具有处理它们的方法的属性集,而行只是数据,应该如此处理而不会进一步复杂化.


+1为该主题的最佳答案.我曾经使用过assoc,然后我切换到了对象(试图创建所有对象),但是由于你说的原因已经切换回了assoc; 它看起来更像数据作为数组而不是对象.

3> blueyed..:

要记住的事情:数组可以很容易地添加到内存缓存(eaccelerator,XCache,..),而对象则不能(它们需要在每次检索时存储和反序列化时进行序列化!).

当您想要添加内存缓存支持时,您可以切换到使用数组而不是对象 - 但到那时您可能必须更改很多代码,这些代码使用以前使用的对象类型返回值.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有