PEAR-Handbuch | ||
---|---|---|
Zurück | Nach vorne |
Das DB_result-Objekt bietet zwei Wege auf die Daten aus einem Datensatz in der Ergebnismenge zuzugreifen: fetchRow() und fetchInto().
fetchRow() liefert einen Datensatz zurück. fetchInto() weist den Datensatz einer Variable zu und liefert DB_OK.
Die Zeiger in der Ergebnismenge wird bei jedem Aufruf auf den nächsten Datensatz gelegt. Es wird NULL zurückgegeben, wenn das Ende der Ergebnismenge erreicht ist.
Ein DB_Error wird zurückgeliefert, wenn ein Fehler auftrat.
Beispiel 34-1. Ergebnismenge holen
|
Die Daten aus einem Datensatz einer Ergebnismenge können auf drei Arten übergeben werden:
ein geordnetes Array (mit Nummer als Schlüssel)
ein assoziatives Array (mit den Spaltennamen als Schlüsseln)
ein Objekt (mit dem Spaltennamen als Objektvariablen)
DB_FETCHMODE_ORDERED (default)
Array ( [0] => 28 [1] => hi ) |
DB_FETCHMODE_ASSOC
Array ( [a] => 28 [b] => hi ) |
DB_FETCHMODE_OBJECT
stdClass Object ( [a] => 28 [b] => hi ) |
Wenn eine Abfrage den gleichen Spaltennamen mehrmals enthält, z.B. beim Verbinden von Tabellen mit gleichen Spaltennamen, und der Modus zum Holen ist DB_FETCHMODE_ASSOC oder DB_FETCHMODE_OBJECT, dann befindet sich der Schlüsselname bzw. Variable trotzdem nur einmal im Array bzw. Objekt. Damit ist der Datensatz unvollständig. Es gibt zwei Möglichkeiten die Situation aufzulösen:
Benutzen Sie Alias-Namen in ihrer Abfrage, wie z.B.: People.Name AS PersonName.
Ändern Sie den Modus auf DB_FETCHMODE_ORDERED.
Der Modus kann bei jedem Aufruf von fetchInto() und fetchRow() gesetzt werden, oder global für jeden Datenbankzugriff mit der setFetchMode()-Methode.
Beispiel 34-2. Bestimmung des Modus pro Aufruf
|
Beispiel 34-3. Änderung des Modus global
|
PEAR::DB unterstützt das gezielte herausholen eines Datensatzes über seine Nummer in der Ergebnismenge. Dazu kann der fetchInto() bzw. bzw. fetchRow()-Methode ein dritter Parameter übergeben werden, der die Nummer enthält. Das ist hilfreich, wenn nur ein Teil der gesamten Ergebnismenge benötigt wird, wie z.B. bei der Aufteilung der Ergebnismenge auf mehrere HTML-Seiten.
Beispiel 34-4. Datensatz über die Nummer holen
|
Das DB_common-Objekt bietet verschiedene Methoden, um eine Abfrage zu vereinfachen, inbesondere bei kleinen Mengen. Diese Methoden erwarten die Abfrage, geben die Ergebnismenge als PHP-Datenstruktur zurück und geben belegten Speicher sofort wieder frei. Die Methoden sind: getOne(), getRow(), getCol(), getAssoc() and getAll().
Nach der Verarbeitung einer Ergebnismenge sollte diese wieder freigegeben werden, um Arbeitsspeicher freizumachen. Dazu benutzen Sie die Methode free().
Beispiel 34-5. Freeing
|
Mit DB haben Sie vier Wege Informationen über eine Ergebnismenge zu erhalten:
numRows() liefert die Anzahl der erhaltenen Datensatze einer SELECT-Abfrage.
Beispiel 34-6. numRows
|
numCols() liefert die Anzahl der Spalten in einer Ergebnismenge einer SELECT-Abfrage.
Beispiel 34-7. numCols
|
affectedRows() liefert die Anzahl der geänderten Datensätze einer INSERT-, UPDATE- oder DELETE-Abfrage
Beispiel 34-8. affectedRows
|
tableInfo() liefert ein assoziatives Array mit Informationen über die Spalten einer SELECT-Abfrage
Beispiel 34-9. tableInfo
|
Zurück | Zum Anfang | Nach vorne |
Einführung - Abfrage | Nach oben | Einführung - Prepare & Execute |