"An exception occurred in driver: could not find driver" - Symfony error?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

1) Du brauchst ein DBMS, wie MySQL, MariaDB oder PostgreSQL. Der Datenbankserver muss erreichbar sein.

Solltest du dein Projekt auf dem eigenen Rechner mit XAMPP eingerichtet haben, öffne das XAMPP Control Panel und starte den MySQL-Server (den du hoffentlich mit installiert hast).

2) Im PHP-Installationsverzeichnis sollte eine php.ini-Datei auffindbar sein. In ihr gibt es eine Sektion, in der mehrere Extensions definiert sind. Stelle sicher, dass

extension=pdo_mysql

nicht (aufgrund eines Semikolons am Anfang der jeweiligen Zeile) auskommentiert ist.

Sofern eine Änderung notwendig war, braucht es eines Serverneustarts.

3) Es wäre des Weiteren praktisch, zu prüfen, ob die Konfigurationsdaten (Connectionstring bzw. Angaben von Host, Nutzername, Passwort, Port) für die Datenbank stimmen. Die Konfigurationsdateien für dein Projekt sollten im config-Ordner (in deinem Projektverzeichnis) liegen. Schlage am besten in der Webdokumentation von Symfony nach, wie und wo es richtig gesetzt werden muss.

antondaidalos 
Fragesteller
 12.05.2021, 19:08

Guten Abend, erst einmal vielen Dank für die Antwort.

Den Connectionstring verstehe ich leider nicht so wirklich. Generell ist mir die Einrichtung einer Datenbank in Symfony schleierhaft. Die Dokumentation habe ich bereits durchforstet, aber noch nichts brauchbares gefunden.

Ich habe irgendetwas mit dem DriverManager gesehen, was ich versucht habe bei mir zu übertragen: https://s18.directupload.net/images/210512/mdt252lp.png

Des Weiteren habe ich auch gesehen, dass man in der .env Datei die Datenbank injizieren kann/muss.

0
regex9  13.05.2021, 03:19
@antondaidalos

Über den DriverManager kannst du zwar auch eine Verbindung zu einer Datenbank herstellen, aber das ist nicht die Art, die du möchtest. Symfony soll sich die DB-Informationen je Request selbst holen können.

Schau hier: https://symfony.com/doc/current/doctrine.html#installing-doctrine - wie du schon schriebst: Gib die Daten in der .env-Datei an. Der Connectionstring besteht dabei aus folgenden Format (für MySQL; andere weichen, wie du in der Dokumentation siehst, etwas ab):

DATABASE_URL="mysql://YOUR_DB_USER:YOUR_DB_PASSWORD@YOUR_DB_HOST_NAME:YOUR_DB_SERVER_PORT/YOUR_DB_NAME?serverVersion=YOUR_DB_SERVER_VERSION_NUMBER"

Die Platzhalter musst du natürlich selbst gegen die richtigen Werte ersetzen. Der Standardport für MySQL/MariaDB ist die 3306. Die Serverversion der Datenbank kannst du dir in einem einfachen PHP-Skript mit mysqli_get_server_info holen oder du schaust, wenn du ein Interface wie phpMyAdmin hast, in dieses (im benannten sollte es auf der Startseite stehen).

Die Datenbank selbst wird folgend mittels Doctrine angelegt.

Und noch einmal zu Punkt 2 (aus meiner Antwort): Wenn du PostgreSQL verwendest, müssten diese Extensions:

extension=php_pgsql.dll
extension=php_pdo_pgsql.dll

aktiviert werden. Auf https://www.php.net/manual/en/pgsql.installation.php wäre außerdem noch der erste Tipp relevant. Prüfe danach am besten in einem einfachen PHP-Skript einmal, ob du dich wie erwartet verbinden kannst:

<?php
  try {
    $pdo = new PDO("pgsql:host=YOUR_HOST;dbname=YOUR_DB_NAME", "YOUR_DB_USER", "YOUR_PASSWORD");
  }
  catch (PDOException $ex) {
    print $ex->getMessage();
  }

In diesem Snippet siehst du auch den Aufbau eines Connectionstring. Die jeweiligen Platzhalter musst du natürlich durch deine eigenen Angaben ergänzen. Wenn du bspw. auf deinem eigenen Rechner arbeitest, wäre der Hostname üblicherweise localhost, der Standardnutzername ist root und das Passwort ist ein leerer String. Sollte dein Datenbankserver über einen anderen Port als 5432 laufen, müsstest du den Port hinter dem Hostname (getrennt durch einen Doppelpunkt) angeben.

Der Connectionstring in der .env-Datei sollte entsprechend aufgebaut werden, wie in der Dokumentation angegeben. Die Serverversion der Datenbank erhälst du mittels pg_version-Funktion.

Nochmal zum DriverManager: Die Klasse solltest du eigentlich gar nicht verändern. Wenn du dich an einer bestimmten Stelle deiner Anwendung mit einer (beliebigen) Datenbank verbinden möchtest, könntest du die getConnection-Methode der DriverManager-Klasse aufrufen und ihr die relevanten Daten für diese Verbindung übergeben. Wie das aussieht, wird hier am Anfang des Artikels auch noch einmal kurz gezeigt.

1
antondaidalos 
Fragesteller
 13.05.2021, 12:25
@regex9

Vielen vielen Dank. Es klappt nun alles.

Wichtig war noch in der .env Datei (habe ich auch erst gesehen nachdem ich ein syntax plugin dafür heruntergeladen habe) zu schauen, ob überhaupt die richtigen Driver auskommentiert waren (bei mir war nämlich mysql auskommentiert...).

0