2012-12-31 10 views
10

Mam skrypt php, który wybiera dane przez mysql_, jednak ostatnio czytałem, że PDO jest drogą do wyjścia i że mysql_ jest amortyzowany. Teraz zamieniam ten skrypt na PDO.Wybieranie danych tabeli za pomocą instrukcji PDO

Moje pytanie brzmi jednak, że nie używam $ _POST do wyboru. Chcę tylko zaznaczyć całą tabelę ze wszystkimi jego danymi więc wprowadzić to zapytanie:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchall(); // or you can just $result = $query as hakre proposed! 

tak wtedy jak ja z moją starszą wersję zamortyzowanego mysql_ skryptu użyłem echo echo tabelę z dane w nim.

echo 
    "<table border='2'> 
    <tr> 
    <th>ID</th> 
    <th>A Number</th> 
    <th>First Name</th> 
    <th>Last Name</th> 
    <th>Why</th> 
    <th>Comments</th> 
    <th>Signintime</th> 
    </tr>" 
    ; 

    foreach($result as $row) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['id'] . "</td>"; 
    echo "<td><a href=Student.php?studentA_num=" . $row['anum'] . ">" .$row['anum'] . " </a></td>"; 
    echo "<td>" . $row['first'] . "</td>"; 
    echo "<td>" . $row['last'] . "</td>"; 
    echo "<td>" . $row['why'] . "</td>"; 
    echo "<td>" . $row['comments'] . "</td>"; 
    echo "<td>" . $row['signintime'] . "</td>"; 
    echo "<td> <input type=\"button\" value=\"Start Session\"onClick=\accept.php?id=" . $row['id'] . "&start=true></td>"; 
} 

    echo "</tr>"; 
    echo "</table>"; 

używając tego, nie mogę uzyskać pojedynczego wyjścia do mojego stołu.

This is all that is being outputted

Moje pytanie jest mi brakuje czegoś z moich wybranych stwierdzeń? Czy nie pobieram żadnych wierszy? Również ustawienia połączenia ustawione w innym skrypcie zwanego connect.php, który jest wymagany przez init.php (w górnej części wszystkich moich stron)

Edit: 1

Zmieniano kod tak, że teraz działa również dodawanie zdjęcia, aby pokazać innym, jak powinien wyglądać! Mam nadzieję, że ktoś może to wykorzystać do pewnego użytku! This is how it looks!

Odpowiedz

10

Robisz zbyt dużo faktycznie:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

Problematyczny jest to:

$result = $dbh->query($query); 

Sprawdź z http://php.net/pdo.query parametr jest ciągiem znaków, faktycznie ciąg SQL używałeś powyżej, nie wartość wyniku połączenia PDO::prepare().

Dla prostego zapytania można po prostu zrobić:

$result = $dbh->query("SELECT * FROM students"); 

Lub jeśli chcesz przygotować:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query; 

Później pewne boilerplate jeśli chcesz wstawić zmienne do zapytania, to dlaczego to przygotowujesz.


Kolejnym problemem jest z linią foreach:

foreach($result as $row); 

Jesteś natychmiast kończące pętlę powodu średnikiem ; na końcu. Usuń ten średnik tak, aby poniższy blok bloków kątowych stał się ciałem pętli foreach.

+0

taki głupi błąd z mojej strony! Dziękuję wam obu! – RaGe10940

+0

Jesteś nowy. Jeśli napotkasz problem, zacznij weryfikować od góry do dołu. Możesz przejrzeć zmienne za pomocą ['var_dump()'] (http://php.net/var_dump), często pomocne. Ustaw także raportowanie błędów dla rozwoju na i na najwyższym poziomie. – hakre

+0

Bardzo dziękuję. – RaGe10940

6

Twój kod jest źle:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

Po wykonaniu przygotowaną instrukcję, można po prostu zadzwonić fetchAll() na nim:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchAll(); 

Reszta kodu będą działać poprawnie po usunięciu średnik po foreach.