Ich möchte eine einfache Tabelle auf meiner Seite mit 3 Spalten, building name
, tags
und architecture style
drucken. Wenn ich versuche, um die Liste der building names
und arch. styles
abzurufen gibt es kein Problem:So vermeiden Sie diese PDO-Ausnahme: Abfragen können nicht ausgeführt werden, während andere ungepufferte Abfragen aktiv sind
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
Mein Problem beginnt am retreaving die ersten 5-Tags für jedes Gebäude der Abfrage habe ich gerade geschrieben.
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
Die Abfrage selbst funktioniert perfekt, aber nicht, wo ich dachte, es zu benutzen:
<?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;
Ich bin nicht auf Anfragen erfahren, so dass ich so etwas wie dies zwar, aber es wirft den Fehler:
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.
Was kann ich tun, um dies zu vermeiden? Sollte ich alle ändern und einen anderen Weg suchen, um diese Art von Anfragen zu erhalten?
danke für die Antwort, ich werde die Dokumentation sehen, ich benutze nur fetchAll(), ich habe nur die Abfrage Länge um die Anzahl der inneren Joins und Tabellen beteiligt, wenn ich es auf phpMyAdmin versuchen die Abfrage funktioniert, sollte es nicht ' t es drin sein – vitto
Ja! jetzt funktioniert es! danke für die Hilfe! – vitto