2

PHP経由でApache LinuxサーバーからWindowsコンピューター上のSQL Server 2008への接続を開こうとしています。ファイアウォールで適切なポートを開いていますが、あいまいなエラーが発生しています

警告: mssql_connect() [function.mssql-connect]: サーバーに接続できません: xxx.xxx.xx.xxx,xxxx

と:

$myServer = "xxx.xxx.xx.xxx,1433"; //with port number; tried both backslash and colon
$myUser = "un";
$myPass = "pw";
$myDB = "db"; 

//connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die( mssql_get_last_message()); 

より具体的なエラー メッセージを取得する方法はありますか? または、2 台のコンピューターがまったく通信しているかどうかをテストして、問題の特定を開始できるようにする方法はありますか?

4

2 に答える 2

2

今日も同じ問題に遭遇しました。これは私のために働く:

これの代わりに

$myServer = "xxx.xxx.xx.xxx,1433"; //with port number; tried both backslash and colon

これを試して:

$myServer = "mssqldb"; //must correspond to [entry] in freetds.conf file

あなたの場合、明確にするために、エントリの名前を変更し、構成ファイルのエントリに完全修飾ホスト名を使用します

# Define a connection to the MSSQL server.
[mssqldbAlias]
        host = mssqldb.mydomain.com
        port = 1433
        tds version = 8.0

mssql_connect() への呼び出しの最初の引数は、freetds.conf ファイルの [エントリ] に対応している必要があります。 だからあなたの呼び出しは

$myServer = "mssqldbAlias"; 
//connection to the database
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
  or die( mssql_get_last_message());
于 2013-08-22T15:02:44.843 に答える
2

PHP を Ubuntu マシンから Windows SQL Server に接続するために使用するコードは次のとおりです。役立つかどうかはわかりませんが、このコードは現在正常に稼働しているため、私たちの環境で動作することはわかっています。 .

ご覧のとおり、mssql_* 関数ではなく PDO を使用しています。Ubuntu では、dblib ドライバーを取得するために php5-sybase パッケージをインストールする必要がありました。

PHP:

<?php
try{
   $con = new PDO("dblib:dbname=$dbname;host=$servername", $username, $password);
}catch(PDOException $e){
   echo 'Failed to connect to database: ' . $e->getMessage() . "\n";
   exit;
}
?>

/etc/odbc.ini

# Define a connection to the MSSQL server.
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssqldb]
Description             = MSSQL Server
Driver                  = freetds
Database                = MyDB
ServerName              = mssqldb
TDS_Version             = 8.0

/etc/odbcinst.ini

# Define where to find the driver for the Free TDS connections.
[freetds]
Description     = MS SQL database access with Free TDS
Driver          = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount      = 1

/etc/freetds/freetds.conf

[global]
        # 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.
[mssqldb]
        host = mssqldb
        port = 1433
        tds version = 8.0
于 2013-01-24T21:10:03.723 に答える