2014年11月14日金曜日

CentOSのPHP(pdo-dblib)から、ODBCなしに Azure SQL Database に接続する(前回の続きです)

前回は、私の嫌いなODBCを使わなくてもコマンドラインで SQL Database につながることを確認しました。
SQL Database が use が使えないので、DB名を接続時に指定する必要があることがわかりました。

では、まずphpinfo()で、PDO周りの設定を確認しましょう。
(おそらくパッケージは epel の php-pdoでしょうか)

以下の状態ならOKです。(コマンドで見てます...)
PDO

PDO support => enabled
PDO drivers => dblib, firebird, mysql, odbc, pgsql, sqlite

pdo_dblib

PDO Driver for FreeTDS/Sybase DB-lib => enabled

Flavour => freetds

接続に必要なのは、dblibです。
FreeTDSのライブラリの中にある DB-Library を使っています。

なお、FreeTDSは前回の設定と同様です。
freetds.conf の内容はこんな感じでしたね。
[mymssql]
host = mssql1.database.windows.net
port = 1433
tds version = 8.0
client charset = UTF-8

この場合、PHPのコードはこうなります。
$server = 'mymssql';
$username = 'user@mssql1';
$password = 'password';
$database = 'mydatabase';

$db = new PDO("dblib:host=" . $server . ";dbname=" . $database . ";charset=UTF-8", $username, $password);
foreach ($db->query('SELECT DB_NAME()') as $row) {
  print_r($row);
}


公式ドキュメントでハマるところは、DSNのhostに渡す名前です。
これは freetds.conf に記述してあるサーバー名(ここでは mymssql)だったんですね。
そりゃわからんよ。

mssql関数でも、ある程度まではイケるんですが、接続時にDB名を指定する方法がわからずに断念しました。(masterには繋げます)

Azureの SQL Database は、唯一管理されたRDBMSなので、もっと他のOSや言語から簡単に繋がってほしいものです。

思い切って、OpenTechとかがFreeTDSプロジェクトに参加するとか、どうでしょう?










0 件のコメント: