2012-10-31 15 views
6

Sto imparando PDO e mi sto confondendo molto, ho questo codice qui sotto e tutto mi sembra giusto comunque sto ricevendo questo codice di errore e non so cosa devo fare per sistemarlo , please help me: CodiceConnessione PDQ MySql al database

<?php 
$hostname='localhost'; 
$username='root'; 
$password=''; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=stickercollections",$username,$password); 
    echo 'Connected to Database<br/>'; 

    $sql = "SELECT * FROM stickercollections"; 
foreach ($dbh->query($sql) as $row) 
    { 
    echo $row["collection_brand"] ." - ". $row["collection_year"] ."<br/>"; 
    } 


    $dbh = null; 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
?> 

errore: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/GOTSWAPMAIN/index.php on line 11

+2

'var_dump ($ dbh-> query ($ sql)) '--- controlla sempre cosa c'è dentro le variabili e quali espressioni restituiscono invece di indovinare – zerkms

+1

Come suggerito da zerkms, sembra che la query non funzioni e restituisca quindi false invece di una PDOStatement iterabile. Sembra che tu stia cercando di usare PDO con le eccezioni. Se la connessione fosse configurata per utilizzare le eccezioni, non si otterrebbe questo errore di argomento non valido poiché verrebbe generata un'eccezione (e quindi il foreach non verrebbe mai eseguito). Devi comunque dire alla connessione di lanciare le eccezioni, o visualizzare il quarto parametro del costrutto PDO :: __ o tramite '$ dbh-> setAttribute'. – Corbin

risposta

16

cercare di aumentare la modalità di errore:

<?php 
$hostname='localhost'; 
$username='root'; 
$password=''; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=stickercollections",$username,$password); 

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line 
    echo 'Connected to Database<br/>'; 

    $sql = "SELECT * FROM stickercollections"; 
foreach ($dbh->query($sql) as $row) 
    { 
    echo $row["collection_brand"] ." - ". $row["collection_year"] ."<br/>"; 
    } 


    $dbh = null; 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
?> 

EDIT: pdo.error-handling dice, in alternativa è possibile utilizzare pdo.errorcode e pdostatement.errorcode (o simili) per avere maggiori informazioni, ma penso eccezione tiro è il modo migliore per gestire le connessioni cattivi, gli host non risolti ecc

+0

Grazie, l'hai fatto, sapevo che era con il setAttribute ma ero confuso su quale e dove, Grazie per la tua qualità nella risposta. –

+0

Prego! :) –

Problemi correlati