2012-10-31 17 views
6

Ich lerne PDO und ich bin sehr verwirrt, ich habe dieses Stück Code unten und alle schauen richtig zu mir aber bekomme diesen Fehlercode und ich weiß nicht, was ich tun muss, um es zu beheben , bitte helfen Sie mir:MySql PDO Verbindung zur Datenbank

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

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

+2

'var_dump ($ dbh-> query ($ sql)) '--- immer überprüfen, was in Variablen ist und welche Ausdrücke zurückgeben statt zu raten – zerkms

+1

Wie zerkms angedeutet wurde, sieht es so aus, als ob die Abfrage fehlschlägt und gibt daher statt einer iterablen PDOS-Anweisung false zurück. Anscheinend möchten Sie PDO mit Ausnahmen verwenden. Wenn die Verbindung für die Verwendung von Ausnahmen konfiguriert wurde, würden Sie diesen ungültigen Argumentfehler nicht erhalten, da eine Ausnahme ausgelöst würde (und somit die foreach niemals ausgeführt würde). Sie müssen der Verbindung jedoch mitteilen, dass Ausnahmen ausgelöst werden sollen, entweder den vierten Parameter von PDO :: __ construct oder über $ dbh-> setAttribute anzeigen. – Corbin

Antwort

16

Try Fehlermodus zu erhöhen:

<?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 sagt, Sie alternativ pdo.errorcode und pdostatement.errorcode (oder wollen) können weitere Informationen zu bekommen, aber ich denke, throw Ausnahme besserer Weg ist, schlechte Verbindungen zu handhaben, nicht gelöst Hosts usw.

+0

Danke, das war es, ich wusste, dass es mit dem SetAttribute war, aber war verwirrt, was und wo, Danke für Ihre Qualität in der Antwort. –

+0

Gern geschehen! :) –

Verwandte Themen