您好我正在使用PDO连接到数据库,我有一个类,其中有一个查看查询结果的函数,在表中我有相同的名称Juan和Pedro但是当我使用foreach打印它们时循环我得到胡安印刷7次
class Posts extends Connection{
public function __construct(){
parent::__construct();
}
public function get_result(){
$res=self::$conn->prepare("SELECT * FROM POSTS");
$res->execute();
$array=$res->fetch(PDO::FETCH_ASSOC);
foreach($array as $value){
echo $array['AUTHOR'] . "<br>";
}
}
}
答案 0 :(得分:3)
这是问题
public function get_result(){
$res=self::$conn->prepare("SELECT * FROM POSTS");
$res->execute();
$array = $res->fetch(PDO::FETCH_ASSOC);
// $array has fields for ONE fetched row.
// here you iterate over fields of ONE fetched row
// and echo one field `AUTHOR`
foreach ($array as $value) {
echo $array['AUTHOR'] . "<br>";
}
}
解决方案 - 必须在循环中提取行,通常是while
循环:
public function get_result(){
$res=self::$conn->prepare("SELECT * FROM POSTS");
$res->execute();
// here your fetch every row of a result set
while ($array = $res->fetch(PDO::FETCH_ASSOC)) {
echo $array['AUTHOR'] . "<br>";
}
}
答案 1 :(得分:1)
您使用PDOStatement::fetch()
,它只会获得一行(第一行,下一行)。
所以你迭代了一行,这给了你7个turnes(因为你显然有7列)$array['AUTHOR']
的结果相同。
如果您想要整个结果集,则需要使用fetchAll()
这将返回所有行的数组,然后您可以迭代。
public function get_result(){
$res=self::$conn->prepare("SELECT * FROM POSTS");
$res->execute();
$array=$res->fetchAll(PDO::FETCH_ASSOC);
foreach($array as $row){
echo $row['AUTHOR'] . "<br>";
}
}