PDO lastInsertId() выдает 0, при определенных обстоятельствах. А именно когда PDO завернут в другой объект и из этой обертки вызывается. Обертка нужна для реконнекта при обрыве, только для этой цели я ее использую. Если вызывать lastInsertId() без обертки, то всё работает как надо и ID выдаются, а из обертки - всегда 0.
Вот код класса обертки:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- class R_PDO {
- protected $pdo_conn;
- protected $dsn, $username, $password, $driver_options;
- public function __construct($dsn, $username, $password, $driver_options) {
- $this -> dsn = $dsn;
- $this -> username = $username;
- $this -> password = $password;
- $this -> driver_options = $driver_options;
- $this -> connect();
- }
- public function __destruct() {
- $this -> pdo_conn = null;
- }
- try {
- $this -> connection() -> query("SHOW STATUS;") -> execute();
- } catch(PDOException $e) {
- throw $e;
- } else {
- write_logs('R_PDO: connection fail, reconnecting...');
- $this -> reconnect();
- }
- }
- }
- protected function connection() {
- return $this -> pdo_conn instanceof PDO ? $this -> pdo_conn : $this -> connect();
- }
- public function connect() {
- try {
- $this -> pdo_conn = new PDO($this -> dsn, $this -> username, $this -> password, (array)$this -> driver_options);
- $this -> pdo_conn -> setAttribute(PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
- } catch(PDOException $e) {
- write_logs($e->getMessage());
- }
- return $this -> pdo_conn;
- }
- public function reconnect() {
- $this -> pdo_conn = null;
- return $this -> connect();
- }
- }