MySQLiで、PDO::ERRMODE_EXCEPTION
みたいな設定にしたかった。
別のインスタンスを作っても、特に mysqli
オブエジェクトとの関連付けをする感じのものがないから、どのインスタンスで設定してもグローバルな設定にされるのかなぁって感じがしたので、確かめた。
<?php
$d1 = new mysqli_driver();
$d2 = new mysqli_driver();
echo $d1->report_mode.PHP_EOL; // 0 (=MYSQLI_REPORT_NONE)
echo $d2->report_mode.PHP_EOL; // 0
$d1->report_mode = MYSQLI_REPORT_ALL;
echo $d1->report_mode.PHP_EOL; // 255
echo $d2->report_mode.PHP_EOL; // 255 ←????!!!!!wwwwww
echo spl_object_hash($d1).PHP_EOL;
// 000000007d27830c0000000039102951
echo spl_object_hash($d2).PHP_EOL;
// 000000007d27830f0000000039102951
var_dump($d1);
var_dump($d2);
オブジェクトハッシュは違うらしい。
var_dumpの結果
object(mysqli_driver)#1 (6) {
["client_info"]=>
string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $"
["client_version"]=>
int(50012)
["driver_version"]=>
int(101009)
["embedded"]=>
bool(false)
["reconnect"]=>
bool(false)
["report_mode"]=>
int(255)
}
object(mysqli_driver)#2 (6) {
["client_info"]=>
string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $"
["client_version"]=>
int(50012)
["driver_version"]=>
int(101009)
["embedded"]=>
bool(false)
["reconnect"]=>
bool(false)
["report_mode"]=>
int(255)
}
内部実装はどうなっているのか
$mysqli_driver->report_modeくらいしか使わないので、これだけ追ってみました。
例によって、自己解釈コメント付き。
家帰ったら追記する
- githubで検索した結果のページ
- 例として、mysqli::__construct() で接続失敗したときにthrowする経路を示す
- HHVMだと挙動が違う。