web-dev-qa-db-ja.com

Laravel to SQL Server(sqlsrv)。[PDOException] could not find driver

イントロ。 My laravelアプリはmysqlを使用していましたが、現在、私が働いている会社(私はリモートワーカーです)のネットワークでホストする必要があります。 laravel=をSQL Serverに統合します。

私はこれを私の.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

php artisan migrateを使用した後

エラー:

  [PDOException]
  could not find driver

私は、Ubuntuを使用しています(雇用主からの)私専用のリモートボックスです。以前に(= Windows PCを使用して)laravelアプリでsqlサーバーを使用してみました。覚えている限り、xampp php.iniのテキストを編集しました。初心者のLinuxユーザーとして、それは私には難しすぎます(CLIのみを使用していたため)。

編集済み(新バージョン)

そのため、Ubuntuからデータベースサーバーへの接続を既に取得しています。 sqlcmd -S <Host> -U <username>を使用しました

クエリ(SELECT * from users_dataなど)をテストしましたが、動作します。

ここで、config/database.phpを変更し、これを追加しました。

'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'   => '',
            ],

しかし、エラーが発生しました:

[InvalidArgumentException]
  Unsupported driver [MSSQL]

「MSSQL」は、FreeTDSの構成に使用する名前です。

15

後に来た人のために

使用するPHPバージョンを確認してください(ホームステッドでは現在php 7.1を使用しているため、php7.1-sybaseをインストールしました)

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

そして、ドライバーは

'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' => '',
        ]

Tsqlを使用して、接続情報が正しいことを確認できます。

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

また、could not find driverエラー。次のパッケージをインストールした後の問題を解決しました。

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

ただし、sqlsrvドライバーを使用しています。これが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

これらのコマンドを実行する前に、常に_Sudo apt-get upgrade_を実行してください。

おかげで、これらの答えはとても役に立ちました。 laravel/Homestead vagrant boxバージョン7.1.0とPHP 7.3。

気まぐれなホームステッド仮想ボックスでコマンド_Sudo apt-get install freetds-common freetds-bin unixodbc php7.3-sybase_を実行しました。

このコマンドは、ローカルphp.ini構成ファイルを保持するか、「インストーラーのバージョン」を使用するようにtwiceを促しました。インストーラーのバージョンを両方使用することを選択しましたが、すべてうまくいきました。 ここに私のlaravel configフォルダ にあるdatabase.phpファイルがあります。また、default => env('DB_CONNECTION', 'sqlsrv')を設定します

0
Erich Meissner

Sybaseをインストールするとき、VMが使用するバージョンと一致することを確認してください。

走る

php --version

次に、正しいsybaseバージョンをインストールします。

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

エンコードエラーが発生した場合は、freedtsとphp.iniの構成も更新する必要があります。 /etc/freetds/freetds.confを次のように変更します。

[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

これをphp.iniに追加します。

client charset = UTF-8
0
dardawk