2013-05-24 13 views
9

Uczę się przygotowanych instrukcji i próbuję pracować z zapytaniem, które daje wiele wierszy wyników. W tej chwili próbuję po prostu dowiedzieć się, jak określić liczbę wierszy, a następnie wyświetlić ten numer w html.Przygotowane instrukcje - liczba wierszy

Moja przygotowana instrukcja wygląda następująco:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 

    /* Close statement */ 
    $stmt -> close(); 
    } 

Rozumiem, że mam najpierw zapisać wyniki, a następnie użyć num_rows, tak:

$stmt->store_result(); 
$stmt->num_rows; 

Jednak jestem działa i wydaje się, że strona się podła, kiedy umieszczę tam ten kod. Nie byłem nawet w stanie przejść do następnego etapu wyświetlania liczby wierszy

Pytanie brzmi: czego mi brakuje w zakresie obliczania liczby wierszy w przygotowanym oświadczeniu, a następnie jak mógłbym wyświetlić go za pomocą <?php echo '# rows: '.$WHATGOESHERE;?>

Dzięki !!

Odpowiedz

12

zwraca liczbę, musisz ją zapisać w zmiennej.

/*.....other code...*/ 
$numberofrows = $stmt->num_rows; 
/*.....other code...*/ 

echo '# rows: '.$numberofrows; 

Więc pełny kod powinien być mniej więcej tak:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 
    $numberofrows = $stmt->num_rows; 

    /* Close statement */ 
    $stmt -> close(); 
    } 
echo '# rows: '.$numberofrows; 
+0

Gdzie pójść w przygotowanym oświadczeniu napisałem? Po wykonaniu execute()? Po bind_result, lub pobrać? Czy to ma znaczenie? – Kevin

+0

@Kevin Nie wierzę w to. Po prostu upewnij się, że idzie po wykonaniu i powinno być dobrze –

+0

Aha i przy okazji zapomniałeś spacji między '?' I 'ZAMÓWIENIE PRZEZ '. Zaktualizuję moją odpowiedź, aby naprawić ten –

-2

Zapoznaj się z Przykład # 2 tutaj: PHP.net

użycie PDO :: zapytań(), aby wydać SELECT COUNT (*) sprawozdanie z tych samych orzeczników jak zamierzonego SELECT, a następnie użyć PDOStatement: : fetchColumn(), aby pobrać liczbę wierszy, które zostaną zwrócone. Twoja aplikacja może następnie wykonać poprawną akcję.