2012-10-31 31 views
6

Uczę się PDO i robię się bardzo zagubiony, mam ten kawałek kodu poniżej i wszystko wygląda dobrze, jednak otrzymuję ten kod błędu i nie wiem, co muszę zrobić, aby to naprawić proszę mi pomóc: kodMySql PDO połączenie z bazą danych

<?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(); 
    } 
?> 

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

+2

'var_dump ($ dbh-> query ($ sql)) --- --- zawsze sprawdź, co kryje się w zmiennych i jakie zwroty zwracają zamiast zgadywać. – zerkms

+1

Jak sugeruje zerkers, wygląda na to, że kwerenda się nie udaje, a zatem zwraca wartość false zamiast iterowalnego PDOStatement. Wygląda na to, że próbujesz korzystać z PDO z wyjątkami. Jeśli połączenie zostało skonfigurowane tak, aby korzystało z wyjątków, nie otrzymasz błędu nieprawidłowego argumentu, ponieważ zostanie zgłoszony wyjątek (a tym samym foreach nigdy nie zostanie wykonany). Musisz jednak poinformować połączenie, aby wyrzucił wyjątki, albo zobacz czwarty parametr konstruktu PDO :: __ lub przez '$ dbh-> setAttribute'. – Corbin

Odpowiedz

16

próbować zwiększyć tryb błędzie:

<?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 mówi, można alternatywnie użyć pdo.errorcode i pdostatement.errorcode (lub jak), aby uzyskać więcej informacji, ale myślę, że rzut Wyjątkiem jest lepszy sposób obsłużyć złe połączenia, nie rozwiązane hosty itp

+0

Dziękuję, to zrobiłem, wiedziałem, że był z setAttribute, ale był zdezorientowany, który z nich i gdzie, Dzięki za jakość w odpowiedzi. –

+0

Nie ma za co! :) –

Powiązane problemy