The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.
Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).
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.
O que é uma API?
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.
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.
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.
O que é um Conector?
Na documentação do MySQL, o termo conector 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.
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 connect a um servidor de banco de dados.
O que é um Driver?
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.
A título de exemplo, a camada de abstração do banco de dados PHP Data Objects (PDO) 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.
À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
driver
é reservado para software que fornece a parte específica
do banco de dados de um pacote de conector.
O que é uma Extensão?
Na documentação do PHP, você encontrará outro termo - extension. 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.
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.
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.
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.
Quais são as principais ofertas de API do PHP para usar o MySQL?
Existem duas opções principais de API ao considerar a conexão com um servidor de banco de dados MySQL:
Extensão mysqli do PHP
Objetos de Dados PHP (PDO)
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.
O que é a extensão mysqli do PHP?
A extensão mysqli
, ou como às vezes é
conhecida, a extensão improved do MySQL, foi desenvolvida
para aproveitar os novos recursos encontrados nos
sistemas MySQL versões 4.1.3 e mais recentes. A extensão mysqli
está incluída nas versões 5 e posteriores do PHP.
A extensão mysqli
tem vários benefícios,
sendo os principais aprimoramentos sobre a
extensão mysql
:
Interface orientada a objetos
Suporte para Declarações Preparadas
Suporte para várias declarações
Suporte para transações
Recursos de depuração aprimorados
Assim como a interface orientada a objetos, a extensão também fornece uma interface processual.
A extensão mysqli
é construída usando a e
strutura de extensão PHP, seu código fonte está localizado no diretório
ext/mysqli.
Para obter mais informações sobre a extensão mysqli
,
consulte MySQLi.
O que é PDO?
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.
Outros exemplos de camadas de abstração de banco de dados incluem JDBC para aplicativos Java e DBI para Perl.
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.
PDO é implementado usando o framework de extensão PHP, seu código fonte está localizado no diretório ext/pdo.
Para mais informações sobre PDO, consulte o PDO.
O que é o driver PDO MYSQL?
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.
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.
O driver PDO MYSQL é implementado usando a estrutura de extensão PHP. Seu código-fonte está localizado no diretório ext/pdo_mysql. Ele não expõe uma API ao programador PHP.
Para obter mais informações sobre o driver PDO MYSQL, consulte MySQL (PDO).
O que é o driver nativo MySQL do PHP?
Para se comunicar com o servidor de banco de dados MySQL, mysqli
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
libmysqlclient
.
No entanto, a interface apresentada pelo libmysqlclient
não
foi otimizada para comunicação com aplicativos PHP, pois
libmysqlclient
foi originalmente projetado com
aplicativos C em mente. Por esta razão, o MySQL Native Driver,
mysqlnd
, foi desenvolvido como uma alternativa ao
libmysqlclient
para aplicações PHP.
Tanto a extensão mysqli
quanto o driver PDO MySQL podem
ser configurados individualmente para usar
libmysqlclient
ou mysqlnd
. Como o
mysqlnd
foi projetado especificamente para ser utilizado
no sistema PHP, ele possui vários aprimoramentos de memória e velocidade em relação ao
libmysqlclient
. Você é fortemente encorajado a
aproveitar essas melhorias.
O MySQL Native Driver é implementado usando a estrutura de extensão PHP. O código-fonte está localizado em ext/mysqlnd. Ele não expõe uma API ao programador PHP.
Comparação de recursos
A tabela a seguir compara a funcionalidade dos principais métodos de conexão ao MySQL a partir do PHP:
Extensão mysqli do PHP | PDO (usando PDO MySQL Driver e MySQL Native Driver) | |
---|---|---|
Versão do PHP introduzida | 5.0 | 5.0 |
Status de desenvolvimento do MySQL | Desenvolvimento ativo | Desenvolvimento ativo |
API suporta conjuntos de caracteres | Sim | Sim |
A API oferece suporte a instruções preparadas do lado do servidor | Sim | Sim |
A API oferece suporte a declarações preparadas do lado do cliente | Não | Sim |
API suporta procedimentos armazenados | Sim | Sim |
A API oferece suporte a várias instruções | Sim | A maioria |
Suporta todas as funcionalidades do MySQL 4.1+ | Sim | A maioria |
The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.
Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).