Mysql导致PHP - 数组还是对象?

2022-08-30 15:30:13

使用PHP / MySQL已经有一段时间了,我想知道使用vs / 是否有任何特定的优势(性能或其他方面)。mysql_fetch_object()mysql_fetch_assoc()mysql_fetch_array()


答案 1

性能方面,使用什么并不重要。不同之处在于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] ;
}

答案 2

mysql_fetch_array使您的代码难以阅读=维护的噩梦。您无法一目了然地看到您的对象正在处理哪些数据。它稍微快一点,但如果这对你很重要,你正在处理如此多的数据,PHP可能不是正确的方法。

mysql_fetch_object有一些缺点,特别是如果你基于数据库层。

  • 列名可能不是有效的 PHP 标识符,例如,如果数据库驱动程序为您提供了查询中指定的列名。然后,您必须开始到处使用。tax-allowanceuser.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粉丝)喜欢将所有内容转换为对象的想法,但我觉得关联数组是数据库中行的更好模型,而不是对象,因为在我看来,对象是一组具有操作方法的属性,而行只是数据,应该这样处理而不会进一步复杂化。