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

Beitrag lesen

Lieber Jörg,

ich weiß nicht, ob ich Dir in Sachen "eleganter" wirklich helfen kann, jedoch habe ich Rückfragen zu Deinem Code, weil ich zwei Details nicht verstehe.

if ( ! $pdo = PDOSQLite3Connect (
    SQLite3File,
    PDOReadOnly,
    E_USER_ERROR
) ) {
	exit;
}

Du verwendest hier eine Konstante mit Namen E_USER_ERROR. Keine Ahnung, welcher Wert darin steht, vermutlich ein integer.

function PDOSQLite3Connect ( $SQLite3File, $PDOReadOnly ) {
  ...
}

Hier wird diese Konstante nicht empfangen. Warum wird sie dann beim Aufruf mit übergeben? Und warum sollte sie das müssen? Sind Konstanten nicht superglobal, so dass man sich deren Übermittlung als Parameter sparen kann?

Vielleicht ist das ja nur ein Überbleibsel von copy&paste.

	if ( ! $pdo = new PDO( 'sqlite:' . $SQLite3File ) ) {
		error_log( 'Datenbankverbindung zu "sqlite:' . SQLite3File . '" hat nicht funktioniert.' ); 
		showErrorMsg();
		return false;
	} else {
		return $pdo;
	}
}

Wozu den else-Zweig? Warum nicht einfach den if-Zweig ohne else notieren und als letzte Anweisung in der Funktion das return $pdo?

Ansonsten habe ich mit SQLite noch nie etwas zu tun gehabt. Meine DB-Kenntnisse beschränken sich auf MySQL/MariaDB.

Liebe Grüße

Felix Riesterer