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:
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.