[PHP-users 20054]Re: SQLサーバーにPEARDBにて接続、パスワードなしの場合
Mashiki
mashiki @ yanah.com
2004年 1月 26日 (月) 19:31:02 JST
Mashikiです。
桝形さん上鍵さん、情報ありがとうございます。
>mssql.phpであれば大丈夫。。。であれば、
>
>> ・php4.3.4でPEARのソースを直さず、MSSQLサーバーのパスワードなしのアカウ
>> ントに接続する方法はありますでしょうか?
>
>http://cvs.php.net/co.php/php-src/ext/sybase/php_sybase_db.c?login=2&r=1.59
>http://cvs.php.net/co.php/php-src/ext/sybase_ct/php_sybase_ct.c?login=2&r=1
>.88
>
>を見ると、sybase(クライアントも)拡張ライブラリは関数エイリアス
>(PHP_FALIAS)としてmssql_*関数を利用できるようになっています。
>
>試せる環境がないので憶測になってしまいますが、もしかしたら、
>これでいけるかもしれません。
桝形さんのアドバイスどおり、単に
$dsn = "sybase://user1:@svr1";
を
$dsn = "mssql://user1:@svr1";
と変えることで、phpのmssql_connect()=sybase_connect()を呼べているみたい
です。
しかし、php4.3.1 → php4.3.4で仕様が変わったのか、sybase_connect()は
引数が省略不可になっており、パスワードを省略すると、結果的にapacheの
エラーログに
[Mon Jan 26 16:53:17 2004] [notice] child pid 24892 exit signal
Segmentation fault (11)
と書き込まれてしまいます。
もしかしたら、sybase.phpの変更はこれを回避するために行われたのかも
しれません。
sybase_connect()自体はパスワードを省略するのでなく、''と長さ0の
文字列の形で渡せば接続はできるようです。この先を見たいため、
クラスDB_sybaseを継承しconnect()メソッドを書き換えたDB_sybase0なる
クラスを定義し、
パスワードが指定されなかった場合、
$conn = $connect_function($interface, $user);
でなく
$conn = $connect_function($interface, $user, '');
と呼ぶようにしたところ、接続はできるようになりました。
# 接続はできるようになりましたが、今度は別のエラーで、SELECT文の
# 結果を得られていません
時間が無くてまとまった調査ができないのですが、とりあえず現状報告まで。
PHP-users メーリングリストの案内