ADOdbのmysqlとmysqli 接続について

違いは、中で mysql_* を使ってるか mysqli_* を使ってるかなのですが、実際使ってみて気になった点をまとめておきます。

  • mysqliで旧バージョンのやり方による接続が、場合によってちょっと厳しい

昔からある接続方法ですが、

$conn = ADONewConnection('mysqli');
$conn->Connect( 'hogehogehost', 'hogehogeuser', 'hogehogepass', 'hogehogedbname' );

です。
ADOdb 4.51からは、DSNを渡す形での接続も可能になっていて、上記の接続は

$conn = NewADOConnection('mysqli://hogehogeuser:hogehogepasss@hogehogehost/hogehogedbname');

とすることも可能です。

上記の "mysqli" を "mysql" に変えれば、mysqlドライバで接続できます。


ここまでは特に問題ないのですが、

デフォルト以外のポートで立ち上がっているDBに、mysqliで繋ぐ場合、旧バージョンのやり方ではできませんでした。

mysqlの場合(13306番でつなぎにいくとします)

$conn = ADONewConnection('mysql');
$conn->Connect( 'hogehogehost:13306', 'hogehogeuser', 'hogehogepass', 'hogehogedbname' );

でOKですが、これをmysqliでやるとエラーになってしまいます・・・

  • mysql_connect の第1引数であるホスト名に、ポート番号も含める形で指定することが可能
  • mysqli_connect の第1引数であるホスト名には、ポート番号を含める形で指定することは不可能で、ポート番号は第5引数で渡す

という違いが吸収しきれていないためとおもわれます。


DSNのほうで接続していれば問題ないので、なるべくDSNを使うようにしたほうがよさそうです。