【问题标题】:When and why to use mysqli_fetch_row, mysqli_fetch_object, mysqli_fetch_assoc, mysqli_fetch_array [duplicate]何时以及为何使用 mysqli_fetch_row、mysqli_fetch_object、mysqli_fetch_assoc、mysqli_fetch_array [重复]
【发布时间】:2013-12-14 04:35:17
【问题描述】:

我在某种程度上理解mysqli_fetch_rowmysqli_fetch_objectmysqli_fetch_assocmysqli_fetch_array 之间的区别。

我的问题是它们是否如此相似(如果它们真的与许多主题所说的几乎相同)我们应该使用哪个? 我们为什么要使用首选的,是否存在一些性能差异?

我读过一些人说永远不要使用 mysqli_fetch_array。我很迷惑。我现在正在阅读一些 PHP 书籍,所有示例都包含它。如果这是不正确的,我最好在锻炼时停止使用它并使用您可以解释和推荐的其他东西吗?

我还读到这些是相等的:

mysqli_fetch_array( $result, MYSQLI_ASSOC ) = mysqli_fetch_assoc( $result ) 
mysqli_fetch_array( $result, MYSQLI_NUM ) = mysqli_fetch_row( $result )
mysqli_fetch_array ( $result ) = mysqli_fetch_assoc( $result ) + mysqli_fetch_row( $result )

如果它们在概念上是相等的,是否存在性能差异?我们应该使用哪个?差异是因为性能原因还是为了开发者的方便?

我坚信这些差异有很大的原因,它们有不同的用法和案例,但我找不到在哪里使用不同的函数和语法。

【问题讨论】:

  • 简单:有几种方法可以“从查询中获取结果”。您可以让它们以数字方式索引或使用它们的列名和作为数组或作为对象。编写 API 的人意识到了这一点。他做了几个(方便的)包装来做这些事情。你可以选择你喜欢的。很多编程都是这样进行的。
  • deceze,所以我可以使用我喜欢的任何东西,这没关系吗?你能推荐我最常用的功能吗?我已经习惯了 mysqli_fetch_array,因为它有很多例子。但是为什么人们说永远不要使用它呢?或者他们没有任何严肃的目的这样说?感谢您的快速回复!
  • 我通常使用_fetch_assoc,因为我想按名称访问我的数据,因为它使代码更易于理解且不易出错。 _fetch_array 以数字方式返回 字符串索引数组,这是多余的,并且可能更浪费。并不是说它在宏伟的计划中真的很重要,但仍然如此。做你需要的;如果您想要命名键,请使用为您提供命名键的功能,仅此而已。
  • 谢谢你,deceze!再来一次!我是否理解正确:函数生成数组并将它们存储在服务器内存中。这就是为什么数组中生成的数据越多,由于我的函数而使用的内存就越多。并且有一天,这些庞大的数据一次又一次的和平可能会开始导致内存泄漏和溢出。
  • 不会有内存泄漏。内存泄漏是分配了内存但再也没有释放的问题,这是一个错误。我们这里所说的与内存泄漏无关,只是暂时使用更多的内存来存储数据。这就是为什么在赠款计划中您可能永远不会注意到差异的原因。直到您尝试一次获取大量数据并且您确实开始注意到...

标签: php mysql mysqli fetch


【解决方案1】:

php.net 文档中的这些行是关键:

mysqli_fetch_array() 是 mysqli_fetch_row() 的扩展版本 功能。除了将数据存储在 结果数组,mysqli_fetch_array() 函数也可以存储 关联索引中的数据,使用结果集的字段名称 作为键。

http://www.php.net/manual/en/mysqli-result.fetch-array.php

在两个或多个列具有相同名称的情况下,引用该列第一次出现的唯一方法是通过数字索引。在这些情况下,您需要将mysqli_fetch_rowmysqli_fetch_arrayMYSQLI_BOTHMYSQLI_NUM 作为其第二个参数(在程序使用中)。

mysqli_fetch_assoc($result) 只是mysqli_fetch_array($result, MYSQLI_ASSOC) 的简写。

mysqli_fetch_object 符合您的预期:它将一行结果作为对象返回。在mysqli_fetch_assoc 上使用它是一个对象或数组是否更好地代表正在处理的记录的问题。该对象可以是您想要的任何类 - stdClass 是默认值。

【讨论】:

    【解决方案2】:

    我不认为有很大的不同,只是你只需要一个函数来做同样的事情;)

    【讨论】:

      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多