quarta-feira, 16 de novembro de 2016

PDO: Alternativa para acessar seus bancos de dados



PHP Data Objects (PDO) é uma extensão PHP que define uma interface de acesso a um banco de dados. Ele tem, de uma certa maneira, a mesma função que o mysql_connectmysql_query, etc. Ele está incluído no PHP desde a versão 5.1. Quanto à versão 5.0, você pode obtê-la com a extensão PECL. 

O que PDO tem a mais que as funções mysql_...

Sua principal vantagem é que ele permite uma abstração para o acesso aos dados. Isso significa que as funções para executar os pedidos e recuperar os dados são os mesmos, seja qual for o servidor SQL utilizado (MySQL, PostgreSQL, etc.). Por exemplo, se você passa do MySQL para o PostegreSQL, você não precisa converter todo o seu código como com as funções mysql_ (mysql_connect seria substituído pelo mysql_query e o pgsql_connect pelo pgsql_query, etc.). Mas, como cada servidor SQL não executa os pedidos SQL da mesma maneira, talvez você precise reescrever certos pedidos. PDO também é orientado a objetos, assim, você poderá ampliá-lo e gerenciar os erros com as exceções.

Como se conectar com o seu servidor SQL

Esta é a parte mais simples. Veja este código:
<?php  
$pdo = new PDO('mysql:host=localhost;dbname=seu_banco', 'usuário', 'senha');  
?>
Eu sublinhei o que você pode modificar: 
mysql é o nome do driver utilizado. Se você usar o PostegreSQL, será o pgsql. Quanto aos outros, veja aqui
localhost é o alojador SQL. É o primeiro argumento que você vai dar na função mysql_connect. 
seu_banco é o nome do seu banco de dados. Isto é o que você vai colocar na função mysql_select_db. 
usuário é o nome do usuário. 
senha é a sua senha. 

Como executar uma consulta sem retorno

O que chamamos de uma consulta sem retorno? É uma consulta que não retorna nenhum dado, como as que deletam, alteram ou inserem dados. As que retornam dados são aquelas que começam com SELECT.... Para este tipo de aplicação, é preferível utilizar o método exec(), que retorna o número de linhas afetadas. Veja este exemplo: 

<?php     
require 'sqlconnect.php';     

$sql = 'DELETE FROM accouns WHERE type = "member"';  
$prepare = $pdo->prepare($sql);   
$res = $prepare ->exec($sql);     
$nb = $prepare ->rowCount();

echo $nb.' members foi removido.';     
?>

Neste exemplo, vamos eliminar todas as contas do tipo member (e manteremos os "admin" e os "modo"). Como você pode ver, a variável $nb contém o número de linhas afetadas (neste caso, excluídas) pela sua consulta. 

Como recuperar os dados

Para recuperar os dados em um banco de dados, vamos usar o método query() da classe DOP. Esse método retorna um objeto do tipo PDOStatement. A classe PDOStatement propõe um método para recuperar, linha por linha, os resultados fetch()

Nós podemos passá-lo na argumentação a forma em que queremos recuperar os dados: uma tabela (padrão), um objeto, etc. Para não precisar ficar indicando como queremos recuperar os dados, ao chamar o método fetch(), podemos indica-lo com o setFetchMode(), uma vez por todas. 

Para proteger nossas consultas contra as injeções de SQL, vamos usar o método quote() da classe PDO. Ele adicionará as aspas nas strings e evitará as injeções dobrando as aspas dentro da cadeia de caracteres. 

Resumindo, veja este exmplo: 
 1. <?php    
 2. require 'sqlconnect.php';    
 3.    
 4. $sql = 'SELECT * FROM members';    
 5. $req = $pdo->query($sql);    
 6. while($row = $req->fetch()) {    
 7.     echo '<a href="member-'.$row['id'].'.html">'.$row['pseudo'].'</a><br/>';    
 8. }    
 9. $req->closeCursor();    
10.?>
Vamos analisar este script : 
Linha 2: vamos incluir a script sqlconnect.php que vai se conectar com a MySQL, como vimos acima. 
Linha 4: armazenamos na variável $sql uma consulta SQL para recuperar todos os campos de todas as entradas na tabela members
Linha 5: executamos a consulta SQL e armazenamos (um objeto PDOStatement) na variável $req.
Linha 6: nós fizemos um loop para cada entrada. Como eu disse acima, o método fetch() retorna as entradas (linhas), uma por uma. Quando há mais, então ele retorna false e o loop para. A entrada é armazenada na variável $row. Esta variável é tanto uma tabela que contém uma chave para cada campo, quanto um número. Se "id" é o primeiro campo na sua tabela, então nós poderemos recupera-lo com $row[0] e $row['id']. Eu prefiro usar o segundo. 
Linha 7: este é um simples eco que direciona para a página de perfil de cada membro. Nada de muito complicado. Deliberadamente, coloquei espaços, para que o CCM.net não transforme o HTML em um verdadeiro link. 
Linha 9: nós fechamos o cursor porque não precisamos mais desta variável. 

Para proteger suas consultas contra as injeções SQL com o método quote(), eu sugiro que veja este exemplo: 
:
$sql = 'SELECT * FROM members WHERE pseudo = '.$pdo->quote($pseudoMember);
 
Foto: © Reprodução

Fonte: http://br.ccm.net/




Nenhum comentário:

Postar um comentário