2014-10-31 9 views
5

Ze starego mysql_ składni udało mi się zrobić coś takiego:Wyodrębnianie n-ty element w wyniku kwerendy mysqli

$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"); } 

jestem znalezieniem wiele trudności w osiągnięciu tego samego rezultatu z mysqli; zazwyczaj pobieram dane z zapytania mysqli za pomocą funkcji mysqli_fetch_assoc($query), aby wyodrębnić rekursywnie wiersz po wierszu wszystkich rekordów w wyniku zapytania.

Jak uzyskać wynik, którego potrzebuję, tj. Wyodrębnienie w każdym cyklu funkcji rekurencyjnej n-tego, n-tego + 1, n-tego + 2 elementu wyniku zapytania? A jak mogę się odwołać do n-tego elementu w polu id? Wydaje mi się niemożliwe, aby pracować z jednym wierszem wyniku zapytania naraz ...

Przepraszam, jeśli to pytanie wydaje się głupie, ale jestem w trakcie przekształcania starej witryny wykonanej ze składni mysql_ w mysqli_ a ja napotykają wiele trudności, nawet jeśli staram się znaleźć w dokumentacji PHP.net (i oczywiście na przepełnienie stosu wiedzy ...) ...

edycji (problem rozwiązany): i ve rozwiązał mój problem zgodnie z sugestiami Jeroena: nie jest dostępna funkcja fetch_all, stworzyłem tablicę przechowującą każdy wiersz wyniku zapytania msqli przez pętlę:

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

pracy w ten sposób jest dużo łatwiej, wskazując na każdego rekordu w tabeli przy użyciu zwykłych indeksów:

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

Jeśli konwersja witrynę tak, chciałbym zaproponować za pomocą klasy PDO. http://us3.php.net/manual/en/class.pdo.php – JakeParis

+4

@JakeParis: Po prostu szuka rozwiązania mysqli_. Po prostu powiedział, że wcześniej używał mysql_, ale chce osiągnąć to samo w mysqli. –

+0

@TiborB., Patrz http://us3.php.net/manual/en/function.mysqli-fetch.php – JakeParis

Odpowiedz

3

Można użyć mysqli_data_seek() ustawić wskaźnik wynik do dowolnego wiersza w zestawie wyników.

Więc twój kod będzie wyglądać następująco:

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

Próbuję tego rodzaju podejścia, myślę, że jest to właściwy sposób postępowania (lub, przynajmniej, ten, który może rozwiązać mój problem) – Hunter

+0

@Hunter Robi to, co robi stare rozwiązanie. Jednakże, jeśli robisz to dużo - '$ max' jest duże - może być bardziej wydajne, aby uzyskać wszystkie wiersze z zapytania w tablicy za jednym razem i uzyskać wyniki z twojej pętli z tej tablicy. – jeroen

+0

co masz na myśli mówiąc "za jednym zamachem"? Używanie pętli i przechowywanie każdego wiersza przyniosło 'mysqli_fetch_assoc' w tablicy ... lub używając odpowiedniej funkcji, aby uzyskać wszystkie dane (naprawdę) za jednym zamachem? Czy masz na myśli funkcję 'fetch_all()'? Ach, wygląda na to, że moja wersja PHP to 5.3.1 (nie wiem, co mieli na myśli z tym "dodatkiem" ;-)), więc zastanawiam się, dlaczego dostaję ten błąd za pomocą 'fetch_all'. – Hunter