这可能是一个绝对的noob问题,因为我是PDO的新手,我无法真正理解发布的其他解决方案。 我要做的就是显示数据库calss中的fetchall返回的查询结果
我已经设置了一个索引页面,用于创建数据库类的实例并调用方法getData,该方法运行FetchAll并返回记录。
$db = new database($pdo);
$sql = 'SELECT * FROM fruit';
$rows = $db->getData($sql);
$count = $db->getCount($sql);
echo $count;
print_r($rows);
foreach($rows as $fruit){
echo $fruit->'fruitName';
}
代码全部运行,$ rows数组填充了get数据的结果,count的结果为8,这是正确的,但我不能用foreach输出结果!
数据库类供参考:
class database
{
function __construct($pdo)
{
$this->pdo = $pdo;
}
function getData($sql)
{
$query = $this->pdo->prepare($sql);
$query->execute();
return $query->fetchAll();
}
function getCount($sql)
{
$query = $this->pdo->prepare($sql);
$query->execute();
return $query->rowCount();
}
}
答案 0 :(得分:0)
如果您在尝试回复$fruit->'fruitName'
时遇到任何错误,请尝试按数组访问它,例如$fruit['fruitName']
。这就是PDO fetchAll()
方法返回结果的方式。
但是,您也可以通过将PDO::FETCH_CLASS
作为fetchAll()
方法的第一个参数,并将类名称作为第二个参数来指定您想要一个对象数组。
见这里:http://php.net/manual/fr/pdostatement.fetchall.php
希望这有帮助!
答案 1 :(得分:0)
FETCH_BOTH
,不会为您提供对象。所以以这种方式编写代码
class database
{
function __construct()
{
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
PDO::ATTR_EMULATE_PREPARES => false,
];
$this->pdo = new PDO($dsn, $user, $pass, $opt);
}
function query($sql, $data = NULL)
{
$query = $this->pdo->prepare($sql);
$query->execute($data);
return $query;
}
}
$db = new database();
$sql = 'SELECT * FROM fruit';
$rows = $db->query($sql)->fetchAll();
$count = count($rows);
echo $count;
print_r($rows);
foreach($rows as $fruit){
echo $fruit->fruitName;
}
最近我写了一篇文章Your first database wrapper's childhood diseases,您可能会觉得这篇文章值得一读。