2012-12-31 10 views
10

Ho uno script php che seleziona i dati tramite mysql_, tuttavia recentemente ho letto che PDO è la strada da percorrere e che mysql_ sta diventando ammortizzato. Ora sto convertendo quello script in DOP.Selezione dei dati della tabella con istruzioni PDO

La mia domanda è, però, non sto usando $ _POST per selezionare. Voglio solo selezionare l'intera tabella con tutti i suoi dati in modo che entro questa query:

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

così allora come ho fatto con la mia vecchia versione ammortizzato mysql_ dello script che ho usato l'eco eco un tavolo con il dati in esso.

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

ora di utilizzare questo, non posso ottenere una singola uscita al mio tavolo.

This is all that is being outputted

La mia domanda è mi sto perdendo qualcosa dai miei select? O non sto recuperando alcuna riga? Anche io le impostazioni di connessione stabilite in un altro script chiamato connect.php che è richiesto dal init.php (in cima a tutte le mie pagine)

Edit: 1

modificato il codice in modo che ora funziona, anche aggiungendo un'immagine per mostrare agli altri come dovrebbe apparire! Spero che qualcuno possa metterlo in qualche modo! This is how it looks!

risposta

10

Si sta facendo troppa realtà:

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

La linea problematico è:

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

Verificare con http://php.net/pdo.query, il parametro è una stringa, in realtà la stringa SQL che già utilizzano sopra, non il valore del risultato di una chiamata PDO::prepare().

Per la vostra query semplice si può semplicemente fare:

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

O se vi piace preparare:

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

Il secondo è un po 'di testo standard, se si desidera inserire variabili nella query, che è perché lo prepari


Il prossimo problema è con la linea foreach:

foreach($result as $row); 

Si stanno chiude il ciclo immediatamente a causa della virgola ; alla fine. Rimuovere quel punto e virgola in modo che il seguente blocco di codice con parentesi angolare diventi il ​​corpo del ciclo foreach.

+0

un errore così sciocco da parte mia! Grazie a tutti e due ragazzi! – RaGe10940

+0

Sei nuovo. In caso di problemi, inizia a verificare da cima a fondo. Puoi consultare le variabili con ['var_dump()'] (http://php.net/var_dump), spesso utile. Imposta anche la segnalazione degli errori per lo sviluppo su on e al livello più alto. – hakre

+0

Ti ringrazierò molto. – RaGe10940

6

Il codice è sbagliato:

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

Dopo l'esecuzione di una dichiarazione preparata, si può chiamare fetchAll() su di esso:

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

Il resto del codice funzionerà bene una volta si rimuove il punto e virgola dopo il foreach.

Problemi correlati