Próbuję pobrać wszystkie rekordy z mojej tabeli na mojej stronie, mam następujące

$sth = $conn->prepare("SELECT * FROM directory WHERE user_active != ''");
$sth->execute();

/* Exercise PDOStatement::fetch styles */
$result = $sth->fetch(PDO::FETCH_ASSOC);
foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) {
    echo $result[First_Name];
}

Tylko, że nie zwracam wszystkich rekordów, tylko moje pierwsze, Czy ktoś może zobaczyć, co robię źle?

3
Liam 19 październik 2012, 13:00

2 odpowiedzi

Najlepsza odpowiedź

Cóż, dzwonisz do $sth->fetch tylko raz. Musisz zapętlić wyniki.

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
   echo $row['First_Name'] . ' ' . $row['Surname'] . "\n";
}

Nie wywołuj również indeksów ciągów tablic bez nawiasów klamrowych. W ten sposób PHP sprawdza, czy klucz jest STAŁY, a następnie rzutuje go na łańcuch. To po prostu zła praktyka i może prowadzić do nieoczekiwanych zachowań.

Jeśli zwróci to tylko jeden wiersz, prawdopodobnie masz tylko jeden wiersz w bazie danych (lub zestawie wyników). Pokaż nam więcej kodu!

6
ddinchev 19 październik 2012, 13:01

Musisz użyć pętli:

while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
    echo $result[First_Name];
    echo ' ' . $result[Surname];
}

Możesz też użyć metody fetchAll:

foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) {
    echo $result[First_Name];
    echo ' ' . $result[Surname];
}

I uwaga: Jeśli First_Name i Surname nie są stałymi, jako nazwy klucza należy użyć ciągu.

$result['First_Name'] i $result['Surname']

11
xdazz 19 październik 2012, 13:06