Julian von Mendel: PDO::prepare()

Hi,

ich hab eine gaaanz kurze, unheimlich blöde Anfänger-Frage zu PDO:

  
<?php  
error_reporting(E_ALL);  
$dbh = new PDO('mysql:host=localhost;dbname=cache', "user", "pw");         $stmt = $dbh->prepare("SELECT * FROM cache");  
print_r($stmt->fetch());  
?>  

Fehlermeldung:
Fatal error: Call to a member function fetch() on a non-object in /home/jvm/public_html/tmp/pdo.php on line 5

$dbh ist ein korrekt erstelltes Objekt. Ein var_dump() auf $stmt zeigt false. Wo liegt das Problem? Der Code ist direkt aus nem' Tutorial abgeschrieben, ich bezweifle das Fehler drin sind. Die Fehlermeldung ergibt sich logischerweise daraus, dass das prepare false zurückgibt. Aber warum macht es das, wenn $dbh ein korrekt erzeugtes PDO-Objekt ist? Wieso erzeugt prepare keine Exception, wo es doch offensichtlich fehlschlägt?

Schöne Grüße
Julian

  1. hi,

    $dbh = new PDO('mysql:host=localhost;dbname=cache', "user", "pw");
    $stmt = $dbh->prepare("SELECT * FROM cache");
    print_r($stmt->fetch());

    Möchtest du das Statement nicht erst mal ausführen lassen ...?

    $stmt = $dbh->prepare(...);
    $sth->execute();
    $stmt->fetch();

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo,

    rtfm

    PDO::ERRMODE_SILENT

    This is the default mode. PDO will simply set the error code for you to inspect using the PDO::errorCode() and PDO::errorInfo() methods on both the statement and database objects; if the error resulted from a call on a statement object, you would invoke the PDOStatement::errorCode() or PDOStatement::errorInfo() method on that object. If the error resulted from a call on the database object, you would invoke those methods on the database object instead.

    gruss

    --
    Swiss Army Chainsaw
    Terrorific!
    Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?
  3. Hi,

    tut mir leid. Ihr habt Recht. Ich bin bei fehlerhaftem Code halt fest von einer Exception ausgegangen. Hätte ich das Manual auswendig gelernt wäre das nicht passiert.

    Schöne Grüße
    Julian