[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 メーリングリストの案内