web-dev-qa-db-ja.com

PHP PDOを使用してMacからSQL Serverに接続するにはどうすればよいですか?

Googleでこの質問を検索すると、多くの誤った、誤解を招く、古い情報が見つかります。驚いたことに、Stack Overflowには確かな答えがないため、変更する必要があります。

ApacheとPHPのMacポートインストールを使用しています。 php5-mssqlをインストールしました。phpinfo()ページでmssqlを確認できます。

しかし、PDOの下にリストされていません。

PDO support enabled
PDO drivers     dblib, mysql, odbc, pgsql 

MssqlはPDOに関連付けられていませんか? PDOを使用してSqlServerデータベースに接続するためにMacで使用できる別のドライバーはありますか?これは可能であるはずです。

29
Eric Z Beard

これは役に立ちますか?

http://blog.nguyenvq.com/2010/05/16/freetds-unixodbc-rodbc-r/

私はFreeTDSを使用してLinuxサーバーからMicrosoft SQLサーバーに接続していますが、上のリンクの人物がMacから接続するためにFreeTDSを使用しているようです。

ここに私の/etc/freetds/freetds.confファイルがあります(私が追加した唯一の部分はXYZサーバーの一番最後にありました):

[global]
        # TDS protocol version
;       tds version = 4.2

        # 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

# Define a connection to the MSSQL server.
[xyz]
        Host = xyz
        port = 1433
        tds version = 8.0

[質問者による編集]

FreeTDSの構成は答えの前半です。設定が完了すると、コマンドラインから次のようなものを実行して接続できるようになります。

tsql -S xyz -U username -P password

次に、PDOドライバーとしてmssqlではなくdblibを使用する必要があります。

$pdo = new PDO("dblib:Host=$dbhost;dbname=$dbname",
                "$dbuser","$dbpwd");

$ dbhostはfreetds.confファイルからの名前です。

16
Benny Hill

多くのスレッドを調べたところ、Mac OS XからPHP 7以前)でMSSQLに接続する最善の方法は、dblibを使用することです(正しいphpバージョンをダウンロードするだけです)。

以下の手順に従って(mssql.so拡張を無視)、非常に簡単に接続できます。

https://github.com/BellevueCollege/public-docs/blob/master/PHP/configure-mssql-pdodblib-mac.md

OS X El Capitanで完璧に動作し、PHP 7。

手順1.-XCodeをインストールする

$ xcode-select ---install

2.- Homebrewをインストールする

3.- Homebrewを使用してautoconfをインストールします。

$ brew install autoconf

4.- FreeTDSをインストールする

$ brew install freetds

5.- PHPソースのバージョンをダウンロードし、圧縮解除します。

6.- PDO DBLIB拡張機能をビルドします(PHP 5.5.14の例)

$ cd php-5.5.14/ext/pdo_dblib
$ phpize
$ ./configure --with-php-config=/usr/bin/php-config --with-pdo-dblib=/usr/local/
$ make
$ Sudo cp modules/pdo_dblib.so /usr/lib/php/extensions/no-debug-non-zts-20121212

7.- .so extensioをphp.ini extension = pdo_dblib.soに追加します

8.- Apacheを再起動します

9.- dblib dsnを使用して接続します。

$pdo = new PDO("dblib:Host=$dbhost;dbname=$dbname","$dbuser","$dbpwd");
5

dblibは、UNIXシステムのmssqlで使用する必要があるドライバーです

他に何かをインストールする必要はありません、

<?php
    $dsn = 'dblib:dbname=testdb;Host=127.0.0.1';
    $user = 'dbuser';
    $password = 'dbpass';
    $dbh = new PDO($dsn, $user, $password);
5
E_p

MicrosoftがこのためのPHP7拡張機能を公開していることに注意してください。ただし、まだPHP5.xを使用している場合は、役に立ちません。私は別のスタックを使用して接続することに成功しました:freetds、odbc、pdo。

Macports、PHP5.6でOS X 10.11.6(El Capitan)を使用しています。

myserver.database.windows.netという名前のサーバー上にmydbというAzure SQLデータベースを作成することから始めました。ファイアウォールをクライアントのIPアドレスに開くことを覚えておくことが重要です。これはサーバーで行います。

最初のステップは、ODBCドライバーとそのPHPコネクター(php56を正しいバージョンのPHPに変更)で)freetdsをインストールすることです:

Sudo port install freetds +odbc
Sudo port install php56-odbc

次に、構成ファイルにいくつかの行を含める必要があります。

/opt/local/etc/odbcinst.ini

[FreeTDS]
    Description = ODBC for FreeTDS
    Driver      = /opt/local/lib/libtdsodbc.so
    Setup       = /opt/local/lib/libtdsodbc.so
    FileUsage   = 1

これは、odbcドライバーの場所をodbcライブラリに通知します。

/opt/local/etc/freetds/freetds.conf

[myserver]
    Host = myserver.database.windows.net
    port = 1433
    tds version = 7.0

これは、サーバーを見つける場所をfreetdcライブラリに通知します。

/opt/local/etc/odbc.ini

[myds]
Description = Test for SQL Server on Azure
Driver = FreeTDS
Trace = Yes
TraceFile = /var/log/sql.log
Database = mydb
Servername = myserver
UserName = myusername
Password = mypassword
Port = 1433
Protocol = 7.0
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No

これにより、データベースを指すmydsというデータソースが作成され、次のPHPに接続できるようになります。

$conn = new PDO('odbc:myds', 'myusername', 'mypassword');

これでうまくいかない場合は、最初にfreetdsのインストールが正しいことを確認してください:

tsql -S myserver -U myusername -P mypassword

次に、ODBCの指定に問題がないことを確認します。

isql -v myds myusername mypassword

https://github.com/lionheart/Django-pyodbc/wiki/Mac-setup-to-connect-to-a-MS-SQL-Server のおかげで、=と同等の機能を果たしますPythonそしてこれは私にこれすべてに正しい方向を示しました。

1
xgretsch

素敵なガイド( https://stackoverflow.com/a/37707426 )を提供してくれたEstebanに感謝します。pdo_dblibドライバーのインストールに成功しました。

ただし、PHP(5.5)とFreeTDSを使用して、提供されているdblib dsnを使用してOSX 10からAzure SQLデータベースに接続する際に問題が発生しました。最終的に修正されたのはAzureデータベース(m53man42a)をユーザー名に追加します

PHPでのdblib PDO接続:

$conn = new PDO("dblib:Host=Azure-sql;dbname=my-database-name", 
"username@m53man42a",
"my-secret-password");

私のFreeTDS.conf:

[Azure-sql]
Host = m53man42a.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8
text size = 20971520

これを箇条書きの番号10としてリストに追加することを検討してください...:D

1
holm50