wake-up-neo.net

Laravel zu SQL Server (sqlsrv). [PDOException] konnte keinen Treiber finden

Intro Meine Laravel-App verwendete mysql. Jetzt muss sie im Netzwerk des Unternehmens gehostet werden, in dem ich arbeite (ich bin ein Remote-Worker). Und diese Firma ist ein Microsoft-Peep, also muss ich die Laravel in ihren SQL Server integrieren. 

Ich habe das in meiner .env

DB_CONNECTION=sqlsrv
DB_Host=ip.address.of.server
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=my_username
DB_PASSWORD=my_password

Nach der Verwendung des php artisan migrate

Error:

  [PDOException]
  could not find driver

Ich verwende Ubuntu, eine Remote-Box für mich (von meinem Arbeitgeber). Ich habe bereits versucht, SQL Server in meiner Laravel-App zu verwenden (auf meinem Windows-PC). Soweit ich mich erinnere, habe ich einige Texte in der xampp php.ini bearbeitet. Als Linux Neuling ist es mir zu schwer (da ich nur CLI verwendet habe).

BEARBEITET (neue Version)

Ich habe also bereits die Konnektivität von Ubuntu zum Datenbankserver erhalten. Ich habe den sqlcmd -S <Host> -U <username> verwendet

und ich habe die Abfragen getestet (wie SELECT * from users_data) und es funktioniert.

Jetzt habe ich den config/database.php geändert und hinzugefügt. 

'sqlsrv' => [
                'driver'   => 'MSSQL',
                'Host'     => env('DB_Host', 'Host.of.the.database'),
                'database' => env('DB_DATABASE', 'my_database'),
                'username' => env('DB_USERNAME', 'my_username'),
                'password' => env('DB_PASSWORD', 'my_pass'),
          'port'     => '1433',
                'prefix'   => '',
            ],

aber ich habe einen Fehler bekommen: 

[InvalidArgumentException]
  Unsupported driver [MSSQL]

"MSSQL" ist der Name, den ich zum Konfigurieren des FreeTDS verwende.

14

Für diejenigen, die danach kamen 

Vergewissern Sie sich, welche Version von PHP Sie verwenden (für mich Homestead, das derzeit PHP 7.1 verwendet, also habe ich PHP 7.1-Sybase installiert).

Sudo apt-get install freetds-common freetds-bin unixodbc php7.1-sybase

Und der Fahrer ist

'sqlsrv' => [
            'driver' => 'sqlsrv',
            'Host' => env('DB_Host', 'localhost'),
            'database' => env('DB_DATABASE', 'forge'),
            'port' => env('DB_PORT', '1433'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ]

Sie können mit tsql sicherstellen, dass die Verbindungsinformationen korrekt sind

TDSVER=8.0 tsql -H Host -U Username -D DatabaseName -p 1433 -P Password
12
Ad NAN

Hatte auch den could not find driver-Fehler, der das Problem nach der Installation folgender Pakete behoben hat:

Sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase

Ich verwende jedoch den sqlsrv Treiber, hier ist mein config/database.php:

'sqlsrv' => [
        'driver'   => 'sqlsrv',
        'Host'     => env('DB_Host', 'localhost'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset'  => 'utf8',
        'prefix'   => '',
    ],
2
zapdev

Führen Sie immer Sudo apt-get upgrade Aus, bevor Sie versuchen, diese Befehle auszuführen.

Danke, diese Antworten haben mir sehr geholfen. Bitte lassen Sie mich erklären, was ich mit Laravel/Homestead Vagrant Box Version 7.1.0 und PHP 7.3 gemacht habe.

Ich habe den Befehl Sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase In meiner virtuellen Homestead-Box ausgeführt.

Dieser Befehl veranlasste mich zweimal , entweder die lokale Konfigurationsdatei php.ini beizubehalten oder die "Installationsversion" zu verwenden. Ich habe mich beide Male für die Installer-Version entschieden und alles hat super funktioniert. Hier ist meine database.php-Datei in meinem laravel config-Ordner . Außerdem setze ich default => env('DB_CONNECTION', 'sqlsrv')

0
Erich Meissner

Stellen Sie bei der Installation von sybase sicher, dass sie mit der Version übereinstimmt, die Ihre VM verwendet. 

Lauf 

php --version

und dann die richtige sybase-Version installieren:

Sudo apt-get install freetds-common freetds-bin unixodbc php7.#-sybase

Wenn Sie Codierungsfehler erhalten, müssen Sie auch Ihre Konfiguration von freedts und php.ini aktualisieren. Ändern Sie die Datei /etc/freetds/freetds.conf so, dass sie wie folgt aussieht:

[global]
        # TDS protocol version
        tds version = 8.0

        # Whether to write a TDSDUMP file for diagnostic purposes
        # (setting this to /tmp is insecure on a multi-user system)
;       dump file = /tmp/freetds.log
;       debug flags = 0xffff

        # Command and connection timeouts
;       timeout = 10
;       connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512
        client charset =  UTF-8

# A typical Sybase server
[egServer50]
        Host = symachine.domain.com
        port = 5000
        tds version = 5.0

# A typical Microsoft server
[egServer70]
        Host = ntmachine.domain.com
        port = 1433
        tds version = 7.0

[mssql]
        Host =
        Port = 1433
        tds version = 8.0

Fügen Sie dies Ihrer php.ini hinzu:

client charset = UTF-8
0
dardawk