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を使うようにしたほうがよさそうです。