Rolf B: PHP PDO:SQLITE - Falle: attempt to write a readonly database - und kein TRUNCATE table in SQLITE

Beitrag lesen

Hallo Jörg,

nein, so geht das nicht. Es ist falsch, ein inneres $pdo Property zu haben. Du schreibst eine Subklasse, keinen Dekorierer, deswegen ist $this dein PDO Objekt. Der return-Wert eines Konstruktors wird ignoriert. D.h. du musst parent::__construct() verwenden, nicht new PDO().

Ich sehe zwar gerade nicht, wo das in der PHP Doku steht, aber ich habe es ausprobiert und diese Info bei SO gefunden. PHP ist nicht JavaScript, wo der Rückgabewert der Konstruktorfunktion beachtet wird. PHPs __construct gibt immer $this zurück.

Meine weiteren Einwände sind meine Meinung und nicht maßgeblich ;)

Ich hätte eine spezifische SQLite-Subklasse für PDO gemacht. Der Konstruktor bekommt den Teil des PDO dsn-parameters, der hinter dem Doppelpunkt steht. Das schließt dann zwar auch den uri: Metadriver aus, aber der widersetzt sich deinen Plausis ohnehin.

hasErrors/getErrors würde ich auch nicht machen. PDO::__construct wirft eine Exception, wenn was schiefgeht. Bleibe idiomatisch[1].

Rolf

--
sumpsi - posui - obstruxi

  1. Look ma, you're really important here! ↩︎