2014-10-31 184 views
5

随着老mysql_语法,我能够做这样的事:一个mysqli的查询结果中提取第n个元素

$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文档(当然堆栈溢出知识...)...

EDIT(问题解决了): 我按照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"]; } 
+0

如果你是无论如何转换的网站,我会建议使用PDO类。 http://us3.php.net/manual/en/class.pdo.php – JakeParis 2014-10-31 14:08:19

+4

@JakeParis:只是他正在寻找一个mysqli_解决方案。他只是说他以前使用过mysql_,但他希望在mysqli中实现同样的功能。 – 2014-10-31 14:08:24

+0

@TiborB。,见http://us3.php.net/manual/en/function.mysqli-fetch.php – JakeParis 2014-10-31 14:09:48

回答

3

您可以使用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']; 
    ... 
} 
+1

我正在尝试这种方法,我认为这是继续进行的正确方法(或者至少可以解决我的问题的方法) – Hunter 2014-10-31 14:35:18

+0

@Hunter它可以完成您的旧解决方案。然而,如果你这么做的话 - '$ max'很大 - 从数组中查询所有行一次性得到所有行并从该数组得到循环结果可能会更高效。 – jeroen 2014-10-31 14:39:50

+0

你的意思是“一气呵成”?使用一个循环并将每行存储在一个数组中,或者使用一个适当的函数来获取所有数据(真的)在一个数组中?你所指的是'fetch_all()'函数?啊,看来我的PHP版本是5.3.1(不知道它们是什么意思,用这个“额外”;-)),所以我想知道为什么我用'fetch_all'得到这个错误。 – Hunter 2014-10-31 15:04:02

相关问题