2012-12-31 3 views
10

Ich habe ein PHP-Skript, das Daten über mysql_ auswählt, aber vor kurzem habe ich gelesen, dass PDO der Weg ist und dass mysql_ abwertet. Jetzt konvertiere ich dieses Skript in PDO.Auswählen von Tabellendaten mit PDO-Anweisungen

Meine Frage ist, ich benutze $ _POST nicht zur Auswahl. Ich will nur mit all seinen Daten die gesamte Tabelle wählen, damit ich diese Abfrage eingeben:

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

so dann, wie ich mit meiner alten abgeschriebenen mysql_ Version des Skripts tat verwenden ich das Echo eine Tabelle Echo mit der Daten drin.

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>"; 

jetzt mit dieser, ich kann nicht eine einzige Ausgabe zu meiner Tabelle.

This is all that is being outputted

Meine Frage ist bin ich etwas fehlt aus meiner select-Anweisungen? Oder hole ich keine Reihen? Ich habe auch die Anschluss-Set-Einstellungen in einem anderen Skript connect.php dass genannt wird durch init.php erforderlich (an der Spitze aller meiner Seiten)

Edit: 1

den Code Herausgegeben so dass es jetzt funktioniert, auch ein Bild hinzufügen, um anderen zu zeigen, wie es aussehen soll! Hoffentlich kann jemand dies irgendwie nutzen! This is how it looks!

Antwort

10

Sie machen zu viel tatsächlich:

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

Die problematische Zeile ist:

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

prüfen mit http://php.net/pdo.query, der Parameter eine Zeichenfolge ist, tatsächlich die SQL-Zeichenfolge, die Sie bereits oben verwenden, nicht der Ergebniswert eines PDO::prepare() Anrufs.

Für Ihre einfache Abfrage können Sie einfach tun:

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

Oder wenn Sie vorbereiten möchten:

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

Die später einige Textvorschlag ist, wenn Sie Variablen in die Abfrage einfügen wollen, das ist warum du es vorbereitest.


Das nächste Problem ist mit der foreach Linie:

foreach($result as $row); 

Sie die Schleife sofort wegen des Semikolons ; am Ende enden. Entfernen Sie das Semikolon, sodass der folgende Codeclock mit Winkelklammer zum Hauptteil der foreach-Schleife wird.

+0

so ein törichter Fehler meinerseits! Danke euch beiden! – RaGe10940

+0

Sie sind neu. Falls Sie auf ein Problem stoßen, beginnen Sie von oben nach unten zu verifizieren. Sie können in Variablen mit ['var_dump()'] (http://php.net/var_dump) suchen, oft hilfreich. Setzen Sie auch Ihre Fehlerberichterstattung für die Entwicklung auf und auf die höchste Stufe. – hakre

+0

Ich danke Ihnen sehr. – RaGe10940

6

Ihr Code ist falsch:

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

Nach einer vorbereiteten Anweisung ausführen, können Sie einfach fetchAll() auf ihn nennen:

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

Der Rest des Codes funktionieren, sobald Sie das Semikolon entfernen nach der foreach.

Verwandte Themen