Nasıl ben sadece PDO'de nesneleri dönebilirsiniz?

2 Cevap php

İlk kez PDO'yu deniyor.

$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;
}

I setFetchMode() yöntemi atlayın, sonra ben istemiyorum ki $animals["name"] aramak gerekir.

Ama ben yapmak her sorgu için setFetchMode() aramak istemiyorum.

Varsayılan FetchMode ayarlamak için bir yolu var mı? Ya query() geri dönüş yapmak için diğer bazı yöntem tek bir global ortamda nesneleri.

2 Cevap

Belki otomatik kısaca sizin için ... işlevini çağırmak için PDO sınıfını genişleterek deneyebilirsiniz:

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;
}

Since PDO would need to know what object you want to fetch into, you would need to specify it manually. But of you just want to use the object to retrieve the data rather than an array and do not care if its not an animal object, you can use anonymous objects by default when you set the attribute after the connection string which could be done in a wrapped constructor

  $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); 

Sonra tüm sorgular nesneleri dönecektir. Bu onun yakın tam olarak ne istediğinizi değil ama.


Ayrıca hayvan sınıfa veri enjekte olabilir:

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

If you look at the query function it is possible to change some options by passing extra parameters: http://www.php.net/manual/en/pdo.query.php I haven't tested it but it looks like it gets you close to what you want