15

Linux Debian 6 x64 で Apache 2.2.16 と PHP 5.4.3 を使用しています。

Linux 用の MSSQL サーバーのネイティブ ODBC ドライバーをインストールするには、次の手順を使用します

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 を使用して PHP 5.4 に unixODBC をインストールします。

$ 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

だから私の質問は:何が起こっているのですか?不足している構成は何ですか? Linux および PHP 5.4 で MSSQL Server のネイティブ ODBC ドライバーを正しくセットアップするにはどうすればよいですか?

Ps .: odbc_connect() を使用しようとすると、PHP は関数が存在しないと言います。

4

5 に答える 5

5

これが少し遅れていることはわかっていますが、まったく同じ問題に頭を悩ませながらこのスレッドにたどり着いたので、将来それに遭遇する人へのいくつかの提案があります:-)

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/

幸運を!

于 2013-07-31T07:53:58.940 に答える
2

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

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

于 2012-10-01T12:35:40.950 に答える
1

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スクリプトは私にはうまく機能します。

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

于 2012-12-14T09:22:45.960 に答える
1

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

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

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

于 2013-01-15T17:11:41.060 に答える
0

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

于 2012-09-07T23:56:44.460 に答える