如何在PDO中简单地返回对象?

Óla*_*age 4 php pdo object

第一次尝试PDO.

$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;
}
Run Code Online (Sandbox Code Playgroud)

如果我跳过该setFetchMode()方法,那么我需要调用$animals["name"]我不想要的.

但我不想打电话setFetchMode()给我做的每个查询.

有没有办法设置默认的FetchMode?或者query()使用一个全局设置制作返回对象的其他方法.

Mar*_*tin 7

也许您可以尝试扩展PDO类以自动为您调用该函数...简而言之:

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


Sea*_*ney 5

由于 PDO 需要知道您想要获取的对象,因此您需要手动指定它。但是,如果您只想使用对象来检索数据而不是数组,并且不关心它是否不是动物对象,则默认情况下,当您在连接字符串之后设置属性时可以使用匿名对象,这可以在包装的构造函数

  $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); 
Run Code Online (Sandbox Code Playgroud)

然后所有查询都将返回对象。虽然这不是你想要的接近。


您还可以将数据注入您的动物类:

while($dataObj = ...) {
 $animal = new Animal($dataObj);
}
Run Code Online (Sandbox Code Playgroud)

如果您查看查询功能,则可以通过传递额外参数来更改一些选项:http : //www.php.net/manual/en/pdo.query.php 我还没有测试过,但看起来它得到了你接近你想要的