Aplicativos em PHP/Abstrações de Bancos de Dados/PEAR/DB
Abstração PEAR/DB
[editar | editar código]Este pacote da PEAR foi substituído pelo MDB mas continua sendo mantido em termos de bugs e segurança.
É uma abstração de bancos de dados com boas funções que tanto economizam o trabalho de desenvolvimento quanto facilitam a migração entre os diversos SGBDs suportados: fbsql, ibase, informix, msql, mssql, mysql, mysqli, oci8, odbc, pgsql, sqlite and sybase.
PEAR/DB Exemplos Testados
A PEAR/DB é uma abstração de Bancos de Dados para uso com o PHP. Abstração é uma técnica que simplifica algo complexo.
Obs.: Nem todos os SGBDs suportam todos os métodos e propriedades da PEAR/DB.
Conexão
<?php
// Create a valid DB object named $db
// at the beginning of your program...
// Forma genérica: $db =& DB::connect('tiposgbd://$usuario:$senha@$host:$porta/$banco');
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
Query
// Proceed with getting some data...
$res =& $db->query('SELECT * FROM clientes');
fetchInto
// Get each row of data on each iteration until
// there are no more rows
//while ($res->fetchInto($row)) {
// Assuming DB's default fetchmode is DB_FETCHMODE_ORDERED
// echo $row[0] . "<br>";
//}
fetchRow
// Or, you could have done the same thing using fetchRow()
while ($row =& $res->fetchRow()) {
// Assuming DB's default fetchmode is DB_FETCHMODE_ORDERED
echo $row[0] . "<br>";
}
?>
fetchInfo
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM clientes');
while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
echo $row['codigo'] . "\n";
}
?>
fetchInto
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$res =& $db->query('SELECT * FROM clientes');
while ($res->fetchInto($row)) {
echo $row['nome'] . "\n";
}
?>
Número de Registros
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM clientes');
echo $res->numRows();
$res->free();
?>
Número de Campos
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM clientes');
echo $res->numCols();
$res->free();
?>
afectedRows
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// remember that this statement won't return a result object. Para: INSERT, UPDATE or DELETE
$db->query('DELETE * FROM clientes');
echo 'I have deleted ' . $db->affectedRows() . ' clients';
?>
TableInfo
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$res =& $db->query('SELECT * FROM clientes');
print_r($db->tableInfo($res));
// That usage works for DB 1.6.0 or later.
// Below is the syntax for earlier versions:
print_r($res->tableInfo());
$res->free();
?>
Prepare e Execute
<?php // Create a valid DB object named $db // at the beginning of your program... require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes'); if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db... // Inserir dois registros apenas com o campo código $sth = $db->prepare('INSERT INTO clientes (codigo) VALUES (?)'); $db->execute($sth, 15000); $db->execute($sth, 18000);
//$res->free(); ?>
Prepare e Execute (arrays)
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...(Adiciona um registro - 15001, com 3 campos)
$sth = $db->prepare('INSERT INTO clientes VALUES (?, ?, ?)');
$data = array(15001, 'quinze', 'amail15');
$db->execute($sth, $data);
//$res->free();
?>
Passando arrays para Execute
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$alldata = array(array(15002, 'quinze2', 'enemail'),
array(15003, 'quinze3', 'toemail'),
array(15004, 'quinze4', 'treemail'),
array(15005, 'quinze5', 'fireemail'));
$sth = $db->prepare('INSERT INTO clientes VALUES (?, ?, ?)');
foreach ($alldata as $row) {
$db->execute($sth, $row);
}
?>
Usando executeMultiple ao invés de execute
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$alldata = array(array(16001, 'one', 'en'),
array(16002, 'two', 'to'),
array(16003, 'three', 'tre'),
array(16004, 'four', 'fire'));
$sth = $db->prepare('INSERT INTO clientes VALUES (?, ?, ?)');
$db->executeMultiple($sth, $alldata);
?>
AutoPrepare
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// With autoPrepare(), you don't have to write your insert or update queries. For example:
// Once you have a valid DB object named $db...
$table_name = 'clientes';
$table_fields = array('codigo', 'nome', 'email');
$sth = $db->autoPrepare($table_name, $table_fields, DB_AUTOQUERY_INSERT);
$table_values = array(16006, 'Fabien', 'France@');
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
?>
Outro
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$table_name = 'clientes';
$table_fields = array('nome', 'email');
$table_values = array('Roberto', 'Brasil@');
$sth = $db->autoPrepare($table_name, $table_fields, DB_AUTOQUERY_UPDATE, 'codigo = 5600');
if (PEAR::isError($sth)) {
die($sth->getMessage());
}
$res =& $db->execute($sth, $table_values);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
AutoExecute
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$table_name = 'clientes';
$fields_values = array(
'codigo' => 16007,
'nome' => 'Fabien',
'email' => 'France@'
);
$res = $db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_INSERT);
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
Outro
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$db =& DB::connect('pgsql://postgres:senha@localhost:5432/testes');
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$table_name = 'clientes';
$fields_values = array(
'nome' => 'Fabien2',
'email' => 'France2'
);
$res = $db->autoExecute($table_name, $fields_values, DB_AUTOQUERY_UPDATE, 'codigo = 1234');
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
Tornando ON todas as opções de Portabilidade enquanto conecta
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
?>
Desconectar
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
$db->disconnect();
?>
GetAll
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Retorna um array de dados
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$data =& $db->getAll('SELECT codigo, nome, email FROM clientes');
if (PEAR::isError($data)) {
die($data->getMessage());
}
print_r($data);
?>
GetAssoc - ret array
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Retorna um array de dados
// Once you have a valid DB object named $db...
$data =& $db->getAssoc('SELECT codigo, nome FROM clientes');
if (PEAR::isError($data)) {
die($data->getMessage());
}
print_r($data);
?>
getCol - dados de coluna
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Retorna dados de uma coluna
$data =& $db->getCol('SELECT codigo, nome FROM clientes');
if (PEAR::isError($data)) {
die($data->getMessage());
}
print_r($data);
?>
Retorna primeira linha da primaira coluna
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Retorna primeira linha da primaira coluna
$data =& $db->getOne('SELECT nome FROM clientes');
if (PEAR::isError($data)) {
die($data->getMessage());
}
echo "$data\n";?>
Outro
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
$data =& $db->getOne('SELECT nome FROM clientes WHERE codigo IN (?, ?)', array(3, 7));
if (PEAR::isError($data)) {
die($data->getMessage());
}
echo "$data\n";
?>
Retorna Primeiro Registro
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Once you have a valid DB object named $db...
$data =& $db->getRow('SELECT codigo, nome FROM clientes',
array(), DB_FETCHMODE_ORDERED);
if (PEAR::isError($data)) {
die($data->getMessage());
}
print_r($data);
?>
limit
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
// Limit de, conte
$res =& $db->limitQuery('SELECT * FROM clientes', 1100, 30);
echo $res->numRows();
if (PEAR::isError($res)) {
die($res->getMessage());
}
?>
Free
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
die($db->getMessage());
}
$res =& $db->query('SELECT nome, email FROM clientes');
while ($row =& $res->fetchRow()) {
echo $row[1] . ', ' . $row[2] . "\n";
}
$res->free();
?>
DbError
<?php
// Create a valid DB object named $db
// at the beginning of your program...
require_once 'DB.php';
$dsn='pgsql://postgres:senha@localhost:5432/testes';
$options = array(
'debug' => 2,
'portability' => DB_PORTABILITY_ALL,
);
$db =& DB::connect($dsn, $options);
if (PEAR::isError($db)) {
/*
* This is not what you would really want to do in
* your program. It merely demonstrates what kinds
* of data you can get back from error objects.
*/
echo 'Messagem Padrão: ' . $db->getMessage() . "\n";
echo 'Código Padrão: ' . $db->getCode() . "\n";
echo 'DBMS/User Message: ' . $db->getUserInfo() . "\n";
echo 'DBMS/Debug Message: ' . $db->getDebugInfo() . "\n";
exit;
}
?>
Referências
http://vulcanonet.com/soft/?pack=pear_tut
http://www.phpbuilder.com/columns/allan20010115.php3?print_mode=1
Estes exemplos foram testados com:
Apache 2.2
PHP 5.1 (ambos no Xampp 1.5.1)
PostgreSQL 8.1.2