Buscar com pdo

Alguém dá um help, por favor.

onde estou errando??? como listar com pdo? não consigo me livrar do maldito erro (
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\alunos\alunoDAO.php on line 55
C)

fiz assim!

Class AlunoDAO{

private $pdo;

function __construct(PDO $con){
	$this->pdo = $con;
}

public function registrarAluno(Aluno $aluno){
	$sql = "INSERT INTO aluno (nome,sobrenome,idcidade) VALUES(:nome,:sobrenome,:idcidade)";

	$nome = strip_tags($aluno->getNome());
	$sobrenome = strip_tags($aluno->getSobrenome());
	$idcidade = $aluno->getIdCidade();

	$query = $this->pdo->prepare($sql);

	$query->execute([
	'nome' => $nome,
	'sobrenome' => $sobrenome,
	'idcidade' => $idcidade,
	]);
}

public function listarAlunos(){
	$sql = "SELECT * FROM aluno";
	$busca = $this->pdo->query(
	$sql,
	PDO::FETCH_CLASS,
	'Aluno'
	);

	$alunos = [];

	foreach($busca as $aluno){

		$alunos[] = $aluno;
	}

	return $alunos;
}

Class AlunoDAO{

private $pdo;

function __construct(PDO $con){
	$this->pdo = $con;
}

public function registrarAluno(Aluno $aluno){
	$sql = "INSERT INTO aluno (nome,sobrenome,idcidade) VALUES(:nome,:sobrenome,:idcidade)";

	$nome = strip_tags($aluno->getNome());
	$sobrenome = strip_tags($aluno->getSobrenome());
	$idcidade = $aluno->getIdCidade();

	$query = $this->pdo->prepare($sql);

	$query->execute([
	'nome' => $nome,
	'sobrenome' => $sobrenome,
	'idcidade' => $idcidade,
	]);
}

public function listarAlunos(){
	$sql = "SELECT * FROM aluno";
	$busca = $this->pdo->query(
	$sql,
	PDO::FETCH_CLASS,
	'Aluno'
	);

	$alunos = [];

	foreach($busca as $aluno){

		$alunos[] = $aluno;
	}

	return $alunos;
}

agredeço desde jaá

O comando pdo->query() só cria a consulta. Para pegar o resultado, você precisa usar fetch ou fetchAll(), dependendo do caso.

$sql = "SELECT * FROM aluno";
$busca = $this->pdo->query($sql,PDO::FETCH_CLASS,'Aluno');

$resultado = $busca->fetchAll();

$alunos = [];

foreach($resultado as $registro){
  $alunos[] = $registro;
}

Obviamente, pode precisar de alguns ajustes.

Referência: https://phpdelusions.net/pdo_examples/select

Abraço.

consegui fazer funfar aqui com o mesmo metodo…

public function registrarAluno(Aluno $aluno){
	$nome = strip_tags($aluno->getNome());
	$sobrenome = strip_tags($aluno->getSobrenome());
	$idcidade = $aluno->getIdCidade();

	$sql = "INSERT INTO aluno (nome,sobrenome,idcidade) VALUES(
	:nome,
	:sobrenome,
	:idcidade)";

	$query = $this->pdo->prepare($sql);

	$query->execute([
	'nome' => $nome,
	'sobrenome' => $sobrenome,
	'idcidade' => $idcidade,
	]);
}

public function listarAlunos(){
	$sql = "SELECT * FROM aluno";
	$resultado = $this->pdo->query(
	$sql,
	PDO::FETCH_CLASS,
	'Aluno'
	);

	$alunos = [];

	foreach($resultado as $aluno){

		$alunos[] = $aluno;
	}

	return $alunos;
}

ainda assim, agradeço!

Pequena dica, assim vc está gastando memoria a toa:

    $alunos = [];

foreach($resultado as $aluno){

	$alunos[] = $aluno;
}

return $alunos;

Melhor seria:

public function listarAlunos() {
    $resultado = $this->pdo->query('SELECT * FROM aluno');
    return $resultado->fetchAll(PDO::FETCH_CLASS, 'Aluno');
}