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 件のコメント:
コメントを投稿