Serialização de um objeto MySQLi

A algum tempo atras eu escrevi um post sobre serialização de objetos. O Ari Garcia recentemente fez um comentario no post me pedindo um exemplo para persistencia de resources.

Devido a isso vou mostrar um exemplo para persistir uma conexão mysqli em uma sessão.

Vou fazer o seguinte: extender a classe mysqli com os meus metodos magicos para serialização, coisa simples mesmo.

Ta ai o exemplo:

class mysqliExt extends mysqli {
       
        protected $_config;
       
        public function __construct( $host, $user, $pass, $schema ) {
               
                $this->_config[‘host’]          = $host;
                $this->_config[‘user’]          = $user;
                $this->_config[‘pass’]          = $pass;
                $this->_config[‘schema’]        = $schema;
               
                $this->conectar();
        }
       
        protected function conectar() {
                parent::__construct( $this->_config[‘host’], $this->_config[‘user’], $this->_config[‘pass’], $this->_config[‘schema’] );
        }
       
        public function __sleep() {
                return array(‘_config’);
        }
       
        public function __wakeup() {
                $this->conectar();
        }
}

$db = new mysqliExt(‘localhost’, ‘root’, , ‘test’);
// Serializando o objeto
$db_serializado = serialize( $db );
$rowset = $db->query( ‘show tables’ );
echo ‘Usando o objeto original: ‘ . PHP_EOL;
echo ‘Tabelas no banco de dados atual: ‘ . count( $rowset ) . PHP_EOL;
if (count($rowset)) {
        while ($row = $rowset->fetch_object()) {
                echo $row->Tables_in_gilcolor . PHP_EOL;
        }
}

echo PHP_EOL;

// Recuperando o objecto selecionado
$db2 = unserialize( $db_serializado );
$rowset2 = $db2->query( ‘show tables’ );
echo ‘Usando o objeto apos a serializacao: ‘ . PHP_EOL;
echo ‘Tabelas no banco de dados atual: ‘ . count( $rowset2 ) . PHP_EOL;
if (count($rowset2)) {
        while ($row2 = $rowset2->fetch_object()) {
                echo $row2->Tables_in_gilcolor . PHP_EOL;
        }
}

ps.: rodei esse codigo em linha de comando.

Qualquer duvida comenta ai que eu respondo o mais rapido possivel.

Leave a comment

Your comment