【问题标题】:Extracting n-th element of a mysqli query result提取mysqli查询结果的第n个元素
【发布时间】:2014-12-27 21:16:31
【问题描述】:

使用旧的mysql_ 语法,我可以做这样的事情:

$query=mysql_query('select id from rank');
for ($i=0; $i<$max; $i++) {
$id0[$i] = mysql_result($query, $i, "id");
$id1[$i] = mysql_result($query, $i+1, "id");
$id2[$i] = mysql_result($query, $i+2, "id");  }

我发现用mysqli 达到同样的结果有很多困难;通常我使用函数mysqli_fetch_assoc($query)来获取mysqli查询的数据,以递归方式逐行提取查询结果中的所有记录。

如何获得我需要的结果,即在递归函数的每个循环中提取查询结果的第 n、n+1、n+2 个元素?以及如何引用 id 字段的第 n 个元素?我似乎不可能一次处理一行查询结果......

如果这个问题看起来很愚蠢,请原谅,但我正在将使用 mysql_ 语法制作的旧网站转换为 mysqli_,即使我尝试参考,我也会遇到很多困难PHP.net 文档(当然还有 Stack Overflow 知识...)...

编辑(问题已解决): 我按照 Jeroen 的建议解决了我的问题:fetch_all 函数不可用,我创建了一个数组,通过循环存储 msqli 查询结果的每一行:

    while ($row=mysqli_fetch_assoc($query)) 
    $table[]=$row; 

以这种方式操作,使用常用索引指向表中的每条记录要容易得多:

for ($i=0; $i<$max; $i++) {
    $id0[$i]=$table[$i]["id"];
    $id1[$i]=$table[$i+1]["id"];
    $id2[$i]=$table[$i+2]["id"]; }

【问题讨论】:

  • 如果您要转换网站,我建议使用 PDO 类。 us3.php.net/manual/en/class.pdo.php
  • @JakeParis:仅供参考,他正在寻找 mysqli_ 解决方案。他只是说他之前使用的是mysql_,但他想在mysqli中实现同样的事情。
  • 似乎有很多人在阅读问题之前就回答了这些问题......我认为这种行为对社区和试图解决问题的人来说并不是真正有用的问题...
  • 我想你在找mysqli_fetch_all?如$results[$i]['id']?

标签: php mysql multidimensional-array mysqli


【解决方案1】:

您可以使用mysqli_data_seek() 将结果指针设置为结果集中的任意行。

所以你的代码看起来像:

for ($i=0; $i<$max; $i++) {
  mysqli_data_seek($result, $i);
  // depending on your php version you might need a temporary variable to
  // get the ID
  $id0[$i] = mysqli_fetch_assoc($result)['id'];
  ...
}

【讨论】:

  • 我正在尝试这种方法,我认为这是正确的方法(或者,至少可以解决我的问题)
  • @Hunter 它执行您旧解决方案的功能。但是,如果您经常这样做 - $max 很大 - 一次从数组中获取查询中的所有行并从该数组中获取循环中的结果可能会更有效。
  • “一次性”是什么意思?使用循环并将获取的每一行 mysqli_fetch_assoc 存储在一个数组中......还是使用适当的函数一次性获取所有数据(真的)?您指的是fetch_all() 函数吗?啊,看来我的 PHP 版本是 5.3.1(不知道他们对那个“额外”的意思是什么 ;-)),所以我想知道为什么我会收到 fetch_all 的错误。
  • @Hunter 是的,如果fetch_all() 不可用,我会循环一次以获取所有结果并将它们存储在一个数组中。使用现在的结果,您最终可能会获得多达 3 次的所有结果。并且将它们全部放在一个数组中将不再需要一个临时变量来访问id 键。
  • fetch_all 是“仅适用于 mysqlnd”:这似乎是我的提供商 (altervista.org) 的问题...顺便说一句,我会尝试遵循您的最后建议
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 2011-07-11
  • 2012-07-13
  • 1970-01-01
  • 2012-01-20
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多