web-dev-qa-db-ja.com

LaravelでSQL Server接続を使用するにはどうすればよいですか?

Laravel 3で作成された作業プロジェクトがあり、MsSQL Serverに切り替える必要があります(ただし、呼び出しではありません)。このデータベースタイプのLaravel構成がわかりません。 ..

database.php内のデフォルトをこの'default' => 'sqlsrv'に変更し、sqlsrv配列でホスト、データベース、ユーザー名、パスワードを構成しましたが、このエラーメッセージが表示されます。

この拡張機能では、SQL Serverと通信するためにMicrosoft SQL Server 2012ネイティブクライアントODBCドライバーが必要です `

いくつかの調査の後、SQLSRVのPDOが必要であることがわかりました。これは、バージョン5.4として既にあり、phpinfopdo_sqlsrv support : enabledが返されるので、すべて正しいようですが、同時にODBC SQLSRV接続を要求します。本当に使用する必要がありますか?

Laravelデータベース接続から直接接続したいのですが...それが必要で、サーバーへのODBC接続を作成した場合でも、どのように設定に入れるのですか?ここに私が設定しているものがあります(もちろんmy...は私の実際の詳細に置き換えられます):

'sqlsrv' => array(
    'driver'   => 'sqlsrv',
    'Host'     => 'myServerIP', 
    'database' => 'myDatabase',
    'username' => 'myUsername',
    'password' => 'myPassword',
    'prefix'   => '',
 ),

私の問題の近くで見つけた唯一のことは、Laravelフォーラムからのこのリンクでした: SQL ServerでのLaravelクエリ それから、設定を与えずに停止します。

21
ghiscoding

ああ、もっと調べてみると、_SQL Server Native Client 10.0_のドライバーが古く、PDOで_MsSQL Server 2008_に接続するには不十分であることがわかりました。少なくともバージョン_11.0_が必要です。 SQL Server 2005+に接続するため

ドライバーのバージョンを検証する場合は、Control Panel >> Administrative Tools >> Data Sources (ODBC)を実行し、Driversタブをクリックして、既にインストール済みの_SQL Server Native Client_を確認できます。ドライバーを更新する場合は、OS構成に応じて、以下の適切なリンクを選択できます...

SQL Server 2012ネイティブクライアント
x86(32ビット)パッケージ http://go.Microsoft.com/fwlink/?LinkID=239647&clcid=0x409
x64(64ビット)パッケージ http://go.Microsoft.com/fwlink/?LinkID=239648&clcid=0x409

11
ghiscoding

LaravelアプリをMS SQL Serverに接続するために私がやったことです:

  1. Sudo apt-get update

  2. sudo apt-get install php5-sybase

php5-mssqlをインストールしようとすると、とにかくphp5-sybaseがインストールされます。これは「Sybase/MS SQL Server module for php5」です。

これにより、Laravelはsqlsrvの代わりにdblibドライバーを使用します。

このファイルを参照してIlluminate\Database\Connectors\SqlServerConnector.phpを参照してください。

  1. このファイルを開きます:/ etc/freetds/freetds.conf

[global]セクションおよびtds version = 4.2

追加 tds version = 8.0(行の先頭にセミカラムなし)

クライアントを追加charset = UTF-8上の行のすぐ下=(なし;行の先頭のセミカラム)

これにより、ドライバーはすべてのデータをutf-8にエンコードし、データ内の奇妙な文字を回避します。

ファイルは次のようになります。

[global]

        # TDS protocol version

;       tds version = 4.2

        tds version = 8.0

        client charset = UTF-8
  1. このディレクトリ/ etc/freetdsおよび過去にファイルlocales.confを作成しますその中には次のものがあります:this(これにより、SQL Serverで日付の正確な解析が可能になります).

[default]

    date format = %Y-%m-%d %I:%M:%S.%z

[en_US]

    date format = %b %e %Y %I:%M:%S:%z%p

    language = us_english

    charset = iso_1

  1. php.iniファイルを編集します

最初にphp -i |でファイルを見つけますgrep php.ini

次に、ファイルを開いて、mssql.charsetを検索します(おそらくこのように無効になります; mssql.charset = "ISO-8859-1"

作成しますmssql.charset = "UTF-8"<<<必ず削除してください;有効にするセミカラム>>

保存して終了

  1. restartサーバー(nginx or Apacheまたはphp-fpm)

  2. もちろん、デフォルトでsqlsrvを使用するようにデータベース構成を設定する必要があることを知っています'default' => 'sqlsrv',そして資格情報を追加します。


その他の方法:

ODBCドライバを使用して接続できます

こちらが素敵なパッケージです https://github.com/ccovey/odbc-driver

18
Mahmoud Zalt

Linuxの場合、Laravel 5およびphp 7.1:

  1. here のように接続を追加します
  2. Sudo apt install php7.1-sybase
  3. 再試行 :)
1
insign