Rolf B: PDO Attribut Probleme

Beitrag lesen

Hallo MB,

bei der PDO Instanziierung gibt ja options. Erlangt man auch mit PDO::setAttribut() und fetch Zugriff?

Ähh. Wenn Du meinst, dass man die Wahl hat zwischen einer der drei folgenden Möglichkeiten:

$db = new PDO($dsn, $user, $passw, [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ]);
// oder
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
// oder
$stmt->fetch(PDO::FETCH_OBJ);

dann würde ich Dir zustimmen wollen.

Auf dem Statement kannst Du auch noch

$stmt->setFetchMode(PDO::FETCH_OBJ);

aufrufen.

Ich vermute allerdings, dass Du auf die Reihenfolge achten musst. Es gibt ja zwei denkbare Möglichkeiten der PDO-Implementierung, und ich weiß nicht, was implementiert ist.

  1. Das Statement hat einen internen Rückverweis auf das PDO Objekt und holt sich - solange kein eigener Fetch-Mode eingestellt wird - den Default-Fetch-Mode des PDO Objekts.
  2. Das Statement bekommt bei Konstruktion den Default-Fetch-Mode des PDO-Objekts und merkt ihn sich.

Wenn Variante 2 implementiert ist, dann ändert sich der Fetchmode im Statement nicht, wenn Du nach Erzeugung des Statements $db->setAttribute() für den Default-Fetch-Mode aufrufst.

Der an fetch/fetchAll übergebene Fetch-Mode sollte aber auf jeden Fall Vorrang vor Statement und PDO haben.

Was Du mit "Value-Prinzip" meinst, verstehe ich nicht. Meine Implementationsvariante 2?

Wobei ja mit fetch-Objekte aller Art PDO::ATTR_DEFAULT_FETCH_MODE der key schon vorgegeben ist oder nich?

Wenn Du hiermit meinst, dass man den fetch-Methoden nur den PDO::FETCH_* Wert geben muss und nicht den Schlüsselnamen PDO::ATTR_DEFAULT_FETCH_MODE, dann ja.

Rolf

--
Dosen sind silbern