第一次尝试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()使用一个全局设置制作返回对象的其他方法.
也许您可以尝试扩展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;
}
由于 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 我还没有测试过,但看起来它得到了你接近你想要的