PHP und Stored Procedures

Lord-Obirah

Grünschnabel
Servus beinand,

ich habe mich heute mit Stored Procedures und PHP beschäftigt. Ich habe mir mittels SQL Manager 2007 for MySQL eine Stored Procedure erstellt, die mir zu Testzwecken schlicht und ergreifend zwei Tabellen ausliest. Die Tabellen enthalten jeweils zwei Spalten mit einer ID und einem Namen, die erste Tabelle hat sieben Zeilen Inhalt, die zweite zwei Zeilen. Die Prozedur zum Auslesen sieht folgendermaßen aus:

PHP:
CREATE DEFINER = 'root'@'localhost' PROCEDURE `getMyData`()
    DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY INVOKER
    COMMENT ''
BEGIN
	SELECT
		*
	FROM 
		tbl_owner;
             
	SELECT
		*
	FROM 
		tbl_persons;
END;

Theoretisch sollten hier zwei Recordsets zurückkommen, führe ich diese Prozedur im SQL Manager aus, bekomme ich genau das was ich will und genau das, was rauskommen sollte.

Rufe ich diese Prozedur aber über PHP auf, bekomme ich nur ein einziges Recordset zurück, nämlich das, welches die erste SELECT-Abfrage erzeugt, die zweite Abfrage wird völlig ignoriert.
Der PHP-Code dazu sieht folgendermaßen aus:
PHP:
//Zugangsdaten
$host = 'xyz';
$user = 'abc';
$pass = '123';
$database = "myDataBase";

//Verbindung aufbauen
$db = new PDO('mysql:host='.$host.'; dbname='.$database, $user, $pass);

//Gespeicherte Prozedur aufrufen
$sql = "call `getMyData`()";
$abfrage = $db->query($sql);

//Daten ausgeben
$RecordSet = $abfrage->fetchObject();
print_r($RecordSet);

echo '<p />';

//nächstes Ergebnis
$abfrage->nextRowset();
$RecordSet = $abfrage->fetchObject();
print_r($RecordSet);

Fehlermeldung gibt es keine, alles läuft wunderbar durch, abgesehen von der Tatsache, dass der zweite Datensatz nicht auf Quellcode-Seite ankommt!

Vielleicht weiß jemand den Grund dafür bzw. kann mir sagen, wie ich an den zweiten Datensatz bzw. allgemein an mehrer Datensätze rankomme. Ist das überhaupt möglich?

Danke für eure Hilfe!
Cheers!
 
öhm das ist so eigentlich auch net möglich ;)
wie will ein Query 2 ResultSets zurückgeben, das ist ja auch total unlogisch, wundert mich, dass der SQL Manager das mitmacht.
Mach doch nen Union daraus, das in einem ResultSet die Ergebnisse aus beiden ResulSets zurückgegeben werden
 
öhm das ist so eigentlich auch net möglich
wie will ein Query 2 ResultSets zurückgeben, das ist ja auch total unlogisch, wundert mich, dass der SQL Manager das mitmacht.
Mach doch nen Union daraus, das in einem ResultSet die Ergebnisse aus beiden ResulSets zurückgegeben werden

Stimmt, da hast du recht, da hab ich mich wohl nicht ganz richtig ausgedrück.
Ich dachte da eher an den Enterprise Manager und die dort verwendeten/erzeugten Stored Procedures. Die würden ein ResultSet/DataSet mit in meinem Fall zwei Tabellen zurückliefern.

So ähnlich hatte ich mir das hier auch vorgestellt, ein ResultSet/DataSet mit zwei Tabellen, die eine enthält die Ergebnisse der ersten SELECT-Abfrage, die andere die Ergebnisse der zweiten Abfrage.

Aber das mit UNION werde ich mal probieren, danke! :)
 
Servus beinand,

das mit dem UNION ist leider nicht ganz das wahre, weil die beiden SELECT-Abfragen nicht zwangsläufig Tabellen mit gleichen Spalten liefern müssen...
 
neija aber 2 ERgebnismengen aus einem Request geht nunmal net, du könntest die Daten ja in temporären Tabellen hinterlegen, die nur diese Verbindung kennt.
 
Zurück