2014-10-31 230 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

相關問題