私の質問の延長として: PHP/FreeBSD から SQL Server Standard Edition へのリモート接続
FreeBSD/Apache/PHP サーバーが WinServer2003/SQL-Server-2000 ボックスを照会できるようにしようとしています。これは公開システム用ではなく、内部報告機能用であることに注意してください。したがって、現時点ではパフォーマンスは重要ではありません。最初の質問は、接続のために MSSQL サーバーを準備するのに役立ち、現在、MSSQL サーバーから何らかの応答を得ています。しかし、私はそれへの接続に成功していません。
PDO_dblib、mssql (FreeTDS) を試しましたが、ODBC は試していません。PDO を動作させることができればいいのですが、それが私がここで目指していることです。これは、私が試した 2 つの中で最も成功した方法でもあります。
PDO:dblib を利用する私の PHP スクリプト
<?php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
$servername = '192.168.1.51';
$port = '1433';
$serverdsn = $servername.':'.$port;
$username = 'webserver';
$password = '123456';
$dbname = 'oneServer_staging';
$sqlstatement = 'SELECT * FROM ordersp';
try
{
$pdo = new PDO ("dblib:host=".$serverdsn.";dbname=".$dbname,$username,$password);
}
catch (PDOException $e)
{
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
exit;
この PDO:dblib スクリプトをブラウザで実行した結果:
Failed to get DB handle: SQLSTATE[28000] Login incorrect. (severity 9)
そして、MSSQL サーバーのアプリケーション ログを調べると、次のようになります。
FreeTDS に関するコメント後に編集
mssql_connect() / FreeTDS を利用する私の PHP スクリプト
<?php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
$username = 'webserver';
$password = '123456';
$dbname = 'oneServer_staging';
$sqlstatement = 'SELECT * FROM ordersp';
$link = mssql_connect('MYMSDN', $username, $password);
if (!$link) {
die('Something went wrong while connecting to MSSQL');
}
この mssql/FreeTDS スクリプトをブラウザーで実行したときの結果:
Warning: mssql_connect(): Unable to connect to server: MYMSDN in
/home/www/[..]/httpdocs/public/default/philip/oneserver-db-test.php
on line 17 Something went wrong while connecting to MSSQL
/usr/local/etc/freetds.conf
[global]
# TDS protocol version
tds version = 4.2
initial block size = 512
# uses some fixes required for some bugged MSSQL 7.0 server tha
# return invalid data to big endian clients
# NOTE TDS version 7.0 or 8.0 should be used instead
; swap broken dates = no
; swap broken money = no
# 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.
# (Microsoft servers sometimes pretend TEXT columns are
# 4 GB wide!) If you have this problem, try setting
# 'text size' to a more reasonable limit
text size = 64512
# A typical Microsoft SQL Server 2000 configuration
[MYMSDN]
host = 192.168.1.51
port = 1433
tds version = 8.0
client charset = UTF-8
スクリプトを実行してもファイル/tmp/freetds.log
には何も表示されませんが、# tsql -C
コマンドを使用すると更新されます。