イントロ。 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の構成に使用する名前です。
後に来た人のために
使用する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
また、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' => '',
],
これらのコマンドを実行する前に、常に_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')
を設定します
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