Erro PHP

Estou com o seguinte erro nesse código:

CONTROLE

Sistema Controle

Novo Cliente

<?php include 'database.php';
                        $pdo = Database::connect();
                        
                        $sql = "SELECT * FROM tb_cliente ORDER BY id DESC";
                        
                        foreach ($pdo->query($sql) as $row)
                        {
                            echo '<tr>';
                            echo '<td>'.$row['nome'].'</td>';
                            echo '<td>'.$row['cpf_cnpj'].'</td>';
                            echo '<td>'.$row['endereco'].'</td>';
                            echo '<td>'.$row['bairro'].'</td>';
                            echo '<td>'.$row['cidade'].'</td>';
                            echo '<td>'.$row['estado'].'</td>';
                            echo '<td>'.$row['tel_fixo'].'</td>';
                            echo '<td>'.$row['celular'].'</td>';
                            echo '<td width=250>';
                            echo '<a class="btn" href="read.php?codigo='.$row['codigo'].'">Read</a>';
                            echo '&nbsp';
                            echo '<a class="btn btn-success" href="update.php"?codigo='.$row['codigo'].'">Update"</a>';
                            echo '&nbsp';
                            echo '<a class="btn btn-danger" href="delete.php?codigo='.$row['codigo'].'">Delete</a>';
                            echo '</tr>';
                        }
                        database::disconnect();
                    ?>
                </tbody>
            </table>
        </div>
    </div>
</body>

Porém está dando o seguinte erro:

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\genesis\index.php on line 44

Será que poderiam me informar o que estou fazendo de errado?

Obrigado a todos.

Nome CPF/CNPJ Endereço Bairro Cidade Estado telefone Celular

Verifique sua classe de conexão.

Tente assim e veja o resultado, aqui funcionou normal.

$pdo = new PDO('mysql:host=localhost;dbname=teste', 'root', '');

Colega,
esta é minha classe de conexão. Desculpe, mas estou começando agora com PHP.

<?php class database { private static $dbhost = 'localhost'; private static $dbname = 'bdcontrole'; private static $dbusername = 'root'; private static $dbpassword = 'c1d1nh3'; private static $cont = null; public function __construct() { die ('Int function is not allowed'); } public static function connect() { if(null == self::$cont) { try { self::$cont = new PDO("mysql:host=".self::$dbhost.";"."dbname=".self::$dbname, self::$dbusername, self::$dbpassword); } catch (Exception $ex) { die($ex->getMessage()); } } return self::$cont; } public static function disconnect() { self::$cont = null; } }

Peço a gentileza de informar-me o que estou fazendo de errado. Obrigado.

já que você está começando, posso te ajudar assim:

<?php

define('HOST', 'localhost');
define('USER', 'root');
define('PASS', 'c1d1nh3');
define('BD', 'bdcontrole');

function conectarComPDO(){
	$dsn = "mysql:host=".HOST.";dbname=".BD;
	
	try{
		$conectar = new PDO($dsn, USER, PASS);
		$conectar->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
		return $conectar;
	}catch(PDOException $e){
		echo "Erro ao conectar ao banco". $e.getMessage();
	}
	
}

function listaProdutos(){
		$pdo = conectarComPdo();
		$query = "SELECT * FROM clientes";
		try{
			$listar = $pdo->query($query);
			$listar->execute();
			
			if($listar->rowCount() > 0){
				return $listar->fetchAll(PDO::FETCH_ASSOC);
			}
		}catch(PDOException $e){
			echo "Erro: ".$e->getMessage();
		}
	}

$todosProds = listaProdutos();

    foreach ($todosProds as $pro){
         echo '<tr>';
        echo '<td>'.$pro['nome'].'</td>';
        .....
}

Colega,

Fico muito grato pela sua ajuda até aqui, funcionou corretamente. Caso tenha outra dúvida, postarei.