1
resposta

Consulta dentro de consulta - Repositório com PDO.

Olá.. Acompanhando essa série de aulas, me deparei com a seguinte dúvida: Como ficaria no repositório se tivesse a necessidade de uma consulta dentro de outra? Onde a segunda consulta depende da primeira.

Ex:

$sql1=mysqli_query($link, "SELECT * FROM estados ORDER BY estado ASC");
while($row1 = mysqli_fetch_array($sql1)){

    $sql2=mysqli_query($link, "SELECT * FROM cidades WHERE estado='".$row1["estado"]."' ORDER BY cidade ASC");
    while($row2 = mysqli_fetch_array($sql2)){

        echo $row2["cidade"]." - ".$row1["estado"]."<br>";

    }
}

Neste caso, dei exemplo de consulta dentro de consulta, mas poderia ser uma consulta e dentro um DELETE também. Gostaria de saber como ficariam estes casos, seguindo o mesmo padrão do curso, nos repositórios + PDO. Qual a melhor prática?

1 resposta

Oi Rodrigo, tudo bem?

Para realizar uma consulta dentro de outra utilizando PDO, você pode seguir um padrão similar ao que foi apresentado no exemplo com mysqli. A diferença é que você irá utilizar a classe PDO e seus métodos para realizar as consultas.

Um exemplinho básico de como ficaria o código utilizando PDO:

$pdo = new PDO("mysql:host=localhost;dbname=seu_banco_de_dados", "seu_usuario", "sua_senha");

$sql1 = $pdo->query("SELECT * FROM estados ORDER BY estado ASC");
while($row1 = $sql1->fetch(PDO::FETCH_ASSOC)){

    $sql2 = $pdo->prepare("SELECT * FROM cidades WHERE estado=:estado ORDER BY cidade ASC");
    $sql2->bindValue(":estado", $row1["estado"]);
    $sql2->execute();

    while($row2 = $sql2->fetch(PDO::FETCH_ASSOC)){

        echo $row2["cidade"]." - ".$row1["estado"]."<br>";

    }
}

Utilizei o método query para executar a primeira consulta e o método prepare para preparar a segunda consulta, usando um parâmetro :estado para evitar possíveis problemas de segurança. E depois utilizei o método bindValue para atribuir o valor ao parâmetro e o método execute para executar a consulta.

Lembrando que este é apenas um exemplo e você pode adaptá-lo de acordo com a estrutura do seu projeto e suas necessidades específicas.

Um abraço e bons estudos.