正直どうなってるんだかさっぱり分かってませんが、
class aho extends PDO { private $dsn, $user, $pass; function __construct($dsn, $user, $pass) { parent::__construct($dsn, $user, $pass); $this->dsn = $dsn; $this->user = $user; $this->pass = $pass; } function rewind() { parent::__construct($this->dsn, $this->user, $this->pass); } } $pdo = new aho('mysql:host=localhost;dbname=aho', 'hoge', 'fuga'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); for ($i = 0; $i < 10; ++$i) { $pid = pcntl_fork(); if ($pid === 0) { $pdo->rewind(); echo $pdo->query('show processlist')->rowCount()."\n"; exit; } else if ($pid === -1) { echo "NG\n"; } else { echo "OK, pid=$pid\n"; } } pcntl_wait($status); exit;
こんなんでとりあえず動いてるみたい。PDO::__constructってどうなってるんだろう?? そこで例外飛んできたらかなり怖い。なんかきれいなやり方ご存知の方は教えてください。
ちなみに__sleep()すると
Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in /home/ichii386/fork.php:22 Stack trace: #0 /home/ichii386/fork.php(22): PDO->__sleep() #1 {main} thrown in /home/ichii386/fork.php on line 22
なんていうふうに例外が飛んできます。