2009-04-14 4 views
3

PDO zum ersten Mal ausprobieren.Wie kann ich einfach Objekte in PDO zurückgeben?

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

$stmt = $dbh->query("SELECT * FROM animals"); 
$stmt->setFetchMode(PDO::FETCH_INTO, new animals); 

foreach($stmt as $animals) 
{ 
    echo $animals->name; 
} 

Wenn ich die setFetchMode() Methode überspringen, dann brauche ich $animals["name"], die will ich nicht nennen.

Aber ich möchte nicht die setFetchMode() für jede Abfrage, die ich mache anrufen.

Gibt es eine Möglichkeit, den Standard-FetchMode festzulegen? Oder eine andere Methode, um die query() Objekte mit einer globalen Einstellung zurückzugeben.

Antwort

6

Vielleicht könnten Sie versuchen, die PDO-Klasse erweitern automatisch für Sie die Funktion aufrufen ... in Kürze:

 
class myPDO extends PDO 
{ 
    function animalQuery($sql) 
    { 
    $result = parent::query($sql); 
    $result->setFetchMode(PDO::FETCH_INTO, new animals); 
    return $result; 
    } 

// // useful if you have different classes 
// function vegetableQuery($sql) 
// { 
//  $result = parent::query($sql); 
//  $result->setFetchMode(PDO::FETCH_INTO, new vegetables); 
//  return $result; 
// } 
} 

$dbh = new myPDO("mysql:host=$hostname;dbname=animals", $username, $password); 

$stmt = $dbh->animalQuery("SELECT * FROM animals"); 

foreach($stmt as $animals) 
{ 
    echo $animals->name; 
} 
+0

Ich hatte dies im Sinn, wollte aber etwas suchen b Nutze es :) Danke, aber. +1 –

2

Da PDO müssten wissen, was Objekt, das Sie in holen wollen, müssten Sie spezifizieren Sie es manuell. Aber von Ihnen wollen nur das Objekt zum Abrufen der Daten und nicht ein Array verwenden und egal ob es ein Tierobjekt ist, können Sie anonyme Objekte standardmäßig verwenden, wenn Sie das Attribut nach der Verbindungszeichenfolge, die in vorgenommen werden konnte ein umschlossener Konstruktor

$connection = new PDO($connection_string); 
    //PDO::FETCH_OBJ: returns an anonymous object with property names that correspond to the column names returned in your result set 
    $connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

Dann werden alle Abfragen Objekte zurückgeben. Obwohl es nicht genau das ist, was Sie wollen, ist es nahe.


Sie können auch die Daten in Ihrem Tier Klasse injizieren:

while($dataObj = ...) { 
$animal = new Animal($dataObj); 
} 

Wenn Sie bei der Abfrage-Funktion aussehen es möglich ist, indem man zusätzliche Parameter einige Optionen zu ändern: http://www.php.net/manual/en/pdo.query.php Ich habe es nicht getestet, aber es sieht so aus, als ob es dir nahe kommt, was du willst

Verwandte Themen