web-dev-qa-db-ja.com

MSSQLServerのネイティブODBC Linux用ドライバーおよびPHP 5.4

Linux Debian 6x64でApache2.2.16とPHP 5.4.3を使用しています。

MSSQLServerのネイティブODBC Linux用ドライバーをインストールするには、次の手順を使用します。 http://www.codesynthesis.com/~boris/blog/2011/12/02/Microsoft-sql-server-odbc-driver-linux /

Odbc.iniファイルを次のように構成しました。

[mydsn]
Driver      = SQL Server Native Client 11.0
Database    = datbase
Server      = xxx.xxx.xxx.xxx,port

そして私のodbcinst.iniはこのように:

[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/Microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=1
UsageCount=1

テストするには、次のコマンドを実行します。

$ isql -v mydsn dbusername dbpassword

そして私は成功しました:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

次に、phpizeを使用してunixODBCをPHP 5.4にインストールします。これを使用します:(最初のコマンド、ln -s ...は、。/ configureがphpのヘッダーを見つけることができないため、使用されます。デフォルトの場所)

$ Sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ Sudo make install

私のphpinfo()で私は得る:

PDO support - enabled
PDO drivers - odbc

PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling        - Enabled, strict matching

次に、PHP 5.4スクリプトですべてをテストします。

<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    $conn = new PDO('odbc:DSN=mydsn;UID='.$usr.';PWD='.$psw);

    $query = 'select * from my_table'; 
    $stmt = $conn->prepare($query);
    $stmt->execute();
    while ($row = $stmt->fetch()) {
        echo "<pre>";
        print_r($row);
        echo "</pre>";
    }
?>

しかし、それは機能しません...私はこのエラーメッセージを受け取りました:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01000] SQLDriverConnect: 0 
[unixODBC][Driver Manager]Can't open lib '/opt/Microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0' : file not found' 
in /var/www/testemssql.php:17 
Stack trace: 
#0 /var/www/testemssql.php(17): PDO->__construct('odbc:DSN=mydsn...') 
#1 {main} thrown in /var/www/testemssql.php on line 17

だから私の質問は:何が起こっているのですか?不足している構成は何ですか? MSSQLServerのネイティブODBC Linux上のドライバーおよびPHP 5.4?

追伸:odbc_connect()を使おうとするとPHPは、関数が存在しないと言います。

15
Vinicius Garcia

MSSQLServerのネイティブODBC Linux用ドライバーには バグ があります

MS SQL Serverを正しく接続するには、FreeTDSを使用します。詳細については、以下を参照してください: Linux上のPHP 5.4:MS SQL Server 2008との接続方法?

2
vinigarcia87

私はこれが少し遅いことを知っていますが、まったく同じ問題に頭をぶつけながらこのスレッドを打ったので、将来それに遭遇する人のためのいくつかの提案があります:-)

1)libsqlncli-11.0.so.1790.0のアクセス許可をチェックして、Apacheが実行されているすべてのユーザーがアクセスできることを確認します(読み取りと実行が必要)

2)lddを使用して、依存関係が欠落していないことを確認します-isqlが上記で機能しているという事実に基づいて、問題はないと思います(ヒント:「見つかりません」を探しています):

ldd /opt/Microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

3)Apacheではなくコマンドラインからphpスクリプトを実行してみてください。そのように機能する場合は、停止4に進みます。機能しない場合は、straceを実行して、実際に何が行われているかを確認することをお勧めします。

4)これは私のためにそれをしたものです! SELinuxをオフにして(つまり、強制/許可モードに設定して)、Apacheでページをもう一度押してみてください。何がブロックされているのか正確にはわかりませんが(詳細に入る時間や傾向はまだありません)、オフになるとすぐにすべてが魅力のように機能しました。傾向がある人なら誰でも、それを掘り下げて、完全に無効にすることなくこれを修正する方法を見つけることができます:-)

SELinuxを無効にするための正確なコマンドは、OSによって異なる場合がありますが、私にとって(CentOSでは)これは機能しました:

http://rbgeek.wordpress.com/2012/08/06/how-to-disable-selinux-on-centos-without-rebooting/

幸運を!

5
conclavia

Odbcinst.iniを除いて、同じ構成:

[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/Microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
UsageCount=1

この行を削除してから再試行してください。

Threading=1

そして、あなたのphpスクリプトは私にはうまく機能します。

これがお役に立てば幸いです。

1
Alx Russell

https://bugs.php.net/bug.php?id=61777 にパッチを添付してphpにパッチを適用して再コンパイルすると、問題が解決します。

DSNと使用法の例については、このブログ投稿も確認してください。

http://strangenut.com/blogs/dacrowlah/archive/2012/04/13/installing-and-using-the-Microsoft-sql-server-odbc-driver-for-linux.aspx

1
KRavEN

自分で試す機会はありませんでしたが、php5-sybaseが正常に機能していると聞きました。これは、リポジトリのDebianとUbuntuの両方で利用できることがわかっています。

0
Ddorda