<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.mysqli.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'mysqli.overview.php',
    1 => 'Vis&atilde;o Geral',
    2 => 'Vis&atilde;o Geral',
  ),
  'up' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'prev' => 
  array (
    0 => 'book.mysqli.php',
    1 => 'MySQLi',
  ),
  'next' => 
  array (
    0 => 'mysqli.quickstart.php',
    1 => 'Guia de in&iacute;cio r&aacute;pido',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/mysqli/overview.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqli.overview" class="chapter">

 <h1 class="title">Visão Geral</h1>


 <p class="para">
  Esta seção fornece uma introdução às opções disponíveis ao desenvolver
  um aplicativo PHP que precisa interagir com um banco de
  dados MySQL.
 </p>

 <p class="para">
  <strong>O que é uma API?</strong>
 </p>

 <p class="para">
  Uma interface de programação de aplicativos, ou API, define as classes,
  métodos, funções e variáveis que seu aplicativo precisará chamar
  para executar a tarefa desejada. No caso de aplicativos PHP
  que precisam se comunicar com bancos de dados,
  as APIs necessárias geralmente são expostas por meio de extensões PHP.
 </p>

 <p class="para">
  As APIs podem ser processuais ou orientadas a objetos. Com uma API procedural, você
  chama funções para realizar tarefas, com a API orientada a objetos você
  instancia classes e então chama métodos nos objetos resultantes.
  Das duas, a última costuma ser a interface preferida, pois é
  mais moderna e leva a um código mais organizado.
 </p>

 <p class="para">
  Ao escrever aplicativos PHP que precisam se conectar ao servidor MySQL,
  existem várias opções de API disponíveis. Este documento discute
  o que está disponível e como selecionar a melhor solução
  para sua aplicação.
 </p>

 <p class="para">
  <strong>O que é um Conector?</strong>
 </p>

 <p class="para">
  Na documentação do MySQL, o termo <em>conector</em>
  refere-se a um software que permite que seu aplicativo
  se conecte ao servidor de banco de dados MySQL. MySQL fornece conectores
  para uma variedade de linguagens, incluindo PHP.
 </p>

 <p class="para">
  Se seu aplicativo PHP precisar se comunicar com um servidor de banco de dados,
  você precisará escrever código PHP para executar atividades como
  conectar-se ao servidor de banco de dados, consultar o banco de dados e outras
  funções relacionadas ao banco de dados. O software é necessário para fornecer a API
  que seu aplicativo PHP usará e também para lidar com a comunicação entre seu aplicativo
  e o servidor de banco de dados, possivelmente usando outras bibliotecas intermediárias
  quando necessário. Este software é conhecido genericamente como conector,
  pois permite que sua aplicação se <em>connect</em>
  a um servidor de banco de dados.
 </p>

 <p class="para">
  <strong>O que é um Driver?</strong>
 </p>

 <p class="para">
  Um driver é um software projetado para se comunicar com um tipo
  específico de servidor de banco de dados. O driver também pode chamar
  uma biblioteca, como a MySQL Client Library ou o MySQL Native
  Driver. Essas bibliotecas implementam o protocolo de baixo nível usado
  para se comunicar com o servidor de banco de dados MySQL.
 </p>

 <p class="para">
  A título de exemplo, a camada de abstração do banco de dados <a href="mysqli.overview.php#mysqli.overview.pdo" class="link">PHP
  Data Objects (PDO)</a> pode usar um dos vários drivers específicos do
  banco de dados. Um dos drivers disponíveis
  é o driver PDO MYSQL, que permite a interface
  com o servidor MySQL.
 </p>

 <p class="para">
  Às vezes, as pessoas usam os termos conector e driver de forma intercambiável,
  o que pode ser confuso. Na documentação relacionada ao MySQL, o termo
  <q class="quote">driver</q> é reservado para software que fornece a parte específica
  do banco de dados de um pacote de conector.
 </p>

 <p class="para">
  <strong>O que é uma Extensão?</strong>
 </p>

 <p class="para">
  Na documentação do PHP, você encontrará outro termo -
  <em>extension</em>. O código PHP consiste em um núcleo,
  com extensões opcionais para a funcionalidade principal. As extensões
  relacionadas ao MySQL do PHP, como a extensão mysqli e a
  extensão do driver PDO MySQL, são
  implementadas usando a estrutura de extensão do PHP.
 </p>

 <p class="para">
  Uma extensão normalmente expõe uma API ao programador PHP, para
  permitir que suas facilidades sejam usadas programaticamente. No entanto,
  algumas extensões que usam a estrutura de extensão PHP não expõem uma
  API ao programador PHP.
 </p>

 <p class="para">
  A extensão do driver PDO MySQL, por exemplo, não expõe uma API ao
  programador PHP, mas fornece uma interface para a camada
  PDO acima dela.
 </p>

 <p class="para">
  Os termos API e extensão não devem significar a mesma coisa,
  pois uma extensão pode não necessariamente expor uma API
  ao programador.
 </p>

 <p class="para">
  <strong>Quais são as principais ofertas de API do PHP para usar o
   MySQL?</strong>
 </p>

 <p class="para">
  Existem duas opções principais de API ao considerar a conexão com um
  servidor de banco de dados MySQL:
 </p>

 <ul class="itemizedlist">

  <li class="listitem">
   <p class="para">
    Extensão mysqli do PHP
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    Objetos de Dados PHP (PDO)
   </p>
  </li>

 </ul>

 <p class="para">
  Cada um tem suas próprias vantagens e desvantagens. A discussão a
  seguir visa fornecer uma breve introdução aos principais aspectos de
  cada API.
 </p>

 <p class="para">
  <strong>O que é a extensão mysqli do PHP?</strong>
 </p>

 <p class="para">
  A extensão <code class="literal">mysqli</code>, ou como às vezes é
  conhecida, a extensão <em>improved</em> do MySQL, foi desenvolvida
  para aproveitar os novos recursos encontrados nos
  sistemas MySQL versões 4.1.3 e mais recentes. A extensão <code class="literal">mysqli</code>
  está incluída nas versões 5 e posteriores do PHP.
 </p>

 <p class="para">
  A extensão <code class="literal">mysqli</code> tem vários benefícios,
  sendo os principais aprimoramentos sobre a
  extensão <code class="literal">mysql</code>:

  <ul class="itemizedlist">

   <li class="listitem">
    <p class="para">
     Interface orientada a objetos
    </p>
   </li>

   <li class="listitem">
    <p class="para">
     Suporte para Declarações Preparadas
    </p>
   </li>

   <li class="listitem">
    <p class="para">
     Suporte para várias declarações
    </p>
   </li>

   <li class="listitem">
    <p class="para">
     Suporte para transações
    </p>
   </li>

   <li class="listitem">
    <p class="para">
     Recursos de depuração aprimorados
    </p>
   </li>

  </ul>
 </p>

 <p class="para">
  Assim como a interface orientada a objetos, a extensão também fornece uma
  interface processual.
 </p>

 <p class="para">
  A extensão <code class="literal">mysqli</code> é construída usando a e
  strutura de extensão PHP, seu código fonte está localizado no diretório
  <var class="filename">ext/mysqli</var>.
 </p>

 <p class="para">
  Para obter mais informações sobre a extensão <code class="literal">mysqli</code>,
  consulte <a href="book.mysqli.php" class="xref">MySQLi</a>.
 </p>

 <p class="para" id="mysqli.overview.pdo">
  <strong>O que é PDO?</strong>
 </p>

 <p class="para">
  PHP Data Objects, ou PDO, é uma camada de abstração
  de banco de dados especificamente para aplicativos PHP. O PDO fornece uma API consistente
  para seu aplicativo PHP, independentemente do tipo de servidor de
  banco de dados ao qual seu aplicativo se conectará. Em teoria, se você estiver usando a
  API PDO, você pode mudar o servidor de banco de dados que você usou, digamos
  Firebird para MySQL, e só precisa fazer pequenas alterações em seu
  código PHP.
 </p>

 <p class="para">
  Outros exemplos de camadas de abstração de banco de dados incluem JDBC para
  aplicativos Java e DBI para Perl.
 </p>

 <p class="para">
  Embora o PDO tenha suas vantagens, como uma API limpa, simples e portátil,
  sua principal desvantagem é que ele não permite que você use todos os
  recursos avançados disponíveis nas versões mais recentes do
  servidor MySQL. Por exemplo, PDO não permite que você use o suporte do MySQL
  para Multiple Statements.
 </p>

 <p class="para">
  PDO é implementado usando o framework de extensão PHP, seu código
  fonte está localizado no diretório <var class="filename">ext/pdo</var>.
 </p>

 <p class="para">
  Para mais informações sobre PDO, consulte o
  <a href="book.pdo.php" class="xref">PDO</a>.
 </p>

 <p class="para">
  <strong>O que é o driver PDO MYSQL?</strong>
 </p>

 <p class="para">
  O driver PDO MYSQL não é uma API como tal, pelo menos da
  perspectiva do programador PHP. Na verdade, o driver PDO MYSQL fica na
  camada abaixo do próprio PDO e fornece funcionalidade específica do MySQL.
  O programador ainda chama a API PDO, mas o PDO usa o driver PDO MYSQL
  para realizar a comunicação com o servidor MySQL.
 </p>

 <p class="para">
  O driver PDO MYSQL é um dos vários drivers PDO disponíveis. Outros
  drivers PDO disponíveis incluem aqueles para os servidores de banco de dados
  Firebird e PostgreSQL.
 </p>

 <p class="para">
  O driver PDO MYSQL é implementado usando a estrutura de
  extensão PHP. Seu código-fonte está localizado no diretório
  <var class="filename">ext/pdo_mysql</var>. Ele não expõe uma API ao
  programador PHP.
 </p>

 <p class="para">
  Para obter mais informações sobre o driver PDO MYSQL, consulte
  <a href="ref.pdo-mysql.php" class="xref">Driver PDO do MySQL</a>.
 </p>

 <p class="para" id="mysqli.overview.mysqlnd">
  <strong>O que é o driver nativo MySQL do PHP?</strong>
 </p>

 <p class="para">
  Para se comunicar com o servidor de banco de dados MySQL, <code class="literal">mysqli</code> e
  o driver PDO MYSQL usam uma biblioteca de baixo nível que implementa
  o protocolo necessário. No passado, a única biblioteca disponível era a
  MySQL Client Library, também conhecida como
  <code class="literal">libmysqlclient</code>.
 </p>

 <p class="para">
  No entanto, a interface apresentada pelo <code class="literal">libmysqlclient</code> não
  foi otimizada para comunicação com aplicativos PHP, pois
  <code class="literal">libmysqlclient</code> foi originalmente projetado com
  aplicativos C em mente. Por esta razão, o MySQL Native Driver,
  <code class="literal">mysqlnd</code>, foi desenvolvido como uma alternativa ao
  <code class="literal">libmysqlclient</code> para aplicações PHP.
 </p>

 <p class="para">
  Tanto a extensão <code class="literal">mysqli</code> quanto o driver PDO MySQL podem
  ser configurados individualmente para usar
  <code class="literal">libmysqlclient</code>ou <code class="literal">mysqlnd</code>. Como o
  <code class="literal">mysqlnd</code> foi projetado especificamente para ser utilizado
  no sistema PHP, ele possui vários aprimoramentos de memória e velocidade em relação ao
  <code class="literal">libmysqlclient</code>. Você é fortemente encorajado a
  aproveitar essas melhorias.
 </p>

 <p class="para">
  O MySQL Native Driver é implementado usando a estrutura de
  extensão PHP. O código-fonte está localizado em
  <var class="filename">ext/mysqlnd</var>. Ele não expõe uma API ao
  programador PHP.
 </p>

 

 <p class="para">
  <strong>Comparação de recursos</strong>
 </p>

 <p class="para">
  A tabela a seguir compara a funcionalidade dos principais
  métodos de conexão ao MySQL a partir do PHP:
 </p>

 <table id="mysqli.overview.option.comparison" class="doctable table">
  <caption><strong>Comparação das opções da API do MySQL para PHP</strong></caption>
  
   <col width="34*" />
   <col width="33*" />
   <col width="33*" />
   <thead>
    <tr>
     <th class="empty">&nbsp;</th>
     <th>Extensão mysqli do PHP</th>
     <th>PDO (usando PDO MySQL Driver e MySQL Native Driver)</th>
    </tr>

   </thead>

   <tbody class="tbody">
    <tr>
     <td>Versão do PHP introduzida</td>
     <td>5.0</td>
     <td>5.0</td>
    </tr>

    <tr>
     <td>Status de desenvolvimento do MySQL</td>
     <td>Desenvolvimento ativo</td>
     <td>Desenvolvimento ativo</td>
    </tr>

    <tr>
     <td>API suporta conjuntos de caracteres</td>
     <td>Sim</td>
     <td>Sim</td>
    </tr>

    <tr>
     <td>A API oferece suporte a instruções preparadas do lado do servidor</td>
     <td>Sim</td>
     <td>Sim</td>
    </tr>

    <tr>
     <td>A API oferece suporte a declarações preparadas do lado do cliente</td>
     <td>Não</td>
     <td>Sim</td>
    </tr>

    <tr>
     <td>API suporta procedimentos armazenados</td>
     <td>Sim</td>
     <td>Sim</td>
    </tr>

    <tr>
     <td>A API oferece suporte a várias instruções</td>
     <td>Sim</td>
     <td>A maioria</td>
    </tr>

    <tr>
     <td>Suporta todas as funcionalidades do MySQL 4.1+</td>
     <td>Sim</td>
     <td>A maioria</td>
    </tr>

   </tbody>
  
 </table>

 
</div>
<?php manual_footer($setup); ?>