Je voudrais imprimer une simple table dans ma page avec 3 colonnes, building name
, tags
et architecture style
. Si je tente de récupérer la liste des building names
et arch. styles
il n'y a pas de problème:Comment éviter cette exception PDO: Impossible d'exécuter des requêtes pendant que d'autres requêtes sans tampon sont actives
SELECT buildings.name, arch_styles.style_name
FROM buildings
INNER JOIN buildings_arch_styles
ON buildings.id = buildings_arch_styles.building_id
INNER JOIN arch_styles
ON arch_styles.id = buildings_arch_styles.arch_style_id
LIMIT 0, 10
Mon problème commence retreaving les 5 premières balises pour chaque bâtiment de la requête que je viens écrit.
SELECT DISTINCT name
FROM tags
INNER JOIN buildings_tags
ON buildings_tags.tag_id = tags.id
AND buildings_tags.building_id = 123
LIMIT 0, 5
La requête elle-même fonctionne parfaitement, mais pas là où je pensais l'utiliser:
<?php
// pdo connection allready active, i'm using mysql
$pdo_conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$sql = "SELECT buildings.name, buildings.id, arch_styles.style_name
FROM buildings
INNER JOIN buildings_arch_styles
ON buildings.id = buildings_arch_styles.building_id
INNER JOIN arch_styles
ON arch_styles.id = buildings_arch_styles.arch_style_id
LIMIT 0, 10";
$buildings_stmt = $pdo_conn->prepare ($sql);
$buildings_stmt->execute();
$buildings = $buildings_stmt->fetchAll (PDO::FETCH_ASSOC);
$sql = "SELECT DISTINCT name
FROM tags
INNER JOIN buildings_tags
ON buildings_tags.tag_id = tags.id
AND buildings_tags.building_id = :building_id
LIMIT 0, 5";
$tags_stmt = $pdo_conn->prepare ($sql);
$html = "<table>"; // i'll use it to print my table
foreach ($buildings as $building) {
$name = $building["name"];
$style = $building["style_name"];
$id = $building["id"];
$tags_stmt->bindParam (":building_id", $id, PDO::PARAM_INT);
$tags_stmt->execute(); // the problem is HERE
$tags = $tags_stmt->fetchAll (PDO::FETCH_ASSOC);
$html .= "... $name ... $style";
foreach ($tags as $current_tag) {
$tag = $current_tag["name"];
$html .= "... $tag ..."; // let's suppose this is an area of the table where I print the first 5 tags per building
}
}
$html .= "...</table>";
print $html;
Je ne suis pas expérimenté sur les requêtes, donc je bien quelque chose comme ça, mais il jette l'erreur:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
Que puis-je faire pour éviter cela? Dois-je tout changer et chercher d'une autre manière pour obtenir ce genre de requêtes?
merci pour la réponse, je vais voir la documentation, j'utilise seulement fetchAll(), j'ai seulement simplifié la longueur de la requête par le nombre de jointures internes et les tables impliquées, si je l'essaie sur phpMyAdmin la requête fonctionne, il ne devrait pas t y être – vitto
Oui! maintenant ça marche! Merci pour l'aide! – vitto