MySQL vs MySQLi ao usar PHP [fechado]

167

Qual é o melhor, MySQL ou MySQLi? E porque? Qual devo usar?

Quero dizer melhor, não apenas em termos de desempenho, mas qualquer outro recurso relevante.

anand.trex
fonte

Respostas:

111

Se você der uma olhada na Visão Geral Aprimorada da Extensão do MySQL , deverá informar tudo o que você precisa saber sobre as diferenças entre as duas.

Os principais recursos úteis são:

  • uma interface orientada a objetos
  • suporte para declarações preparadas
  • suporte para múltiplas instruções
  • suporte para transações
  • recursos aprimorados de depuração
  • suporte ao servidor incorporado.
Mark Davidson
fonte
1
sim, a melhor coisa é que os apoios mysqli preparado declarações
jondinham
7
Também deve ser observado que o MySQLi funciona apenas com o MySQL 5+. Isso não é mais relevante, mas quando o MySQLi foi lançado, o MySQL 4 ainda era o padrão. Isso é parte da razão pela qual as extensões são separadas, o antigo driver MySQL permanece lá para fins de compatibilidade.
zneak
6
Vale a pena notar que as coisas mudaram muito em seis anos. mysql_*()agora está obsoleto e será removido em breve. Você não deve usá-lo para novo código.
Qual devemos escolher com menos CPU e RAM?
Mahdi Jazini
1
Veja a resposta de Gordon abaixo. A extensão antiga do mysql não é mais suportada, portanto você poderá usar melhor a extensão do mysqli.
Mark-Davidson #
70

Existe uma página de manual dedicada a ajudar na escolha entre mysql, mysqli e PDO em

A equipe do PHP recomenda mysqli ou PDO_MySQL para novos desenvolvimentos:

É recomendável usar as extensões mysqli ou PDO_MySQL. Não é recomendado usar a antiga extensão mysql para novos desenvolvimentos. Uma matriz detalhada de comparação de recursos é fornecida abaixo. O desempenho geral das três extensões é considerado o mesmo. Embora o desempenho da extensão contribua apenas com uma fração do tempo total de execução de uma solicitação da web PHP. Frequentemente, o impacto é tão baixo quanto 0,1%.

A página também possui uma matriz de recursos comparando as APIs de extensão. As principais diferenças entre a API mysqli e mysql são as seguintes:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

Há uma matriz de recursos adicionais comparando as bibliotecas (novo mysqlnd versus libmysql) em

e um artigo de blog muito completo em

Gordon
fonte
15

Eu abandonei usando o mysqli. É simplesmente muito instável. Eu tive consultas que travam o PHP usando o mysqli, mas funcionam bem com o pacote mysql. O mysqli também trava nas colunas LONGTEXT . Este bug foi criado de várias formas desde pelo menos 2005 e permanece quebrado . Eu sinceramente gostaria de usar instruções preparadas, mas o mysqli não é confiável o suficiente (e ninguém parece se preocupar em corrigi-lo). Se você realmente deseja declarações preparadas, vá com o DOP.

cleto
fonte
2
A DOP também não é exatamente perfeita (já encontrei alguns desagradáveis), mas pelo menos tem uma base de usuários mais ampla, portanto é provavelmente uma aposta mais segura.
troelskn
@troelskn, então o mysql normal não é melhor?
Pacerier 16/07/2013
@Pacerier Considerando que está obsoleto, eu diria que não. Em geral, parece que a DOP se tornou a escolha padrão.
troelskn
@troelskn, mas preterido não significa nada, exceto que não estaria presente nas versões futuras. Em termos de estabilidade, o mysql normal não é mais estável?
Pacerier 18/07/2013
1
Neste ponto (5.5) PHP irá emitir ativamente avisos se você usá-lo: php.net/manual/en/migration55.deprecated.php
troelskn
13

MySQLi significa MySQL aprimorado. É uma interface orientada a objetos para as ligações do MySQL que facilita as coisas de usar. Também oferece suporte para declarações preparadas (que são muito úteis). Se você estiver no PHP 5, use o MySQLi.

Ross
fonte
5

O que é melhor é DOP; é uma interface menos básica e também oferece os mesmos recursos do MySQLi.

Usar instruções preparadas é bom porque elimina as possibilidades de injeção de SQL; o uso de instruções preparadas do servidor é ruim porque aumenta o número de viagens de ida e volta.

MarkR
fonte
3

para mim, declarações preparadas são um recurso obrigatório. mais exatamente, ligação de parâmetro (que funciona apenas em instruções preparadas). é a única maneira realmente sensata de inserir strings nos comandos SQL. eu realmente não confio nas funções de 'escape'. a conexão com o banco de dados é um protocolo binário, por que usar um subprotocolo limitado a ASCII para parâmetros?

Javier
fonte
1
O PDO geralmente usa instruções preparadas do lado do cliente, portanto, elas não são realmente preparadas no servidor - mas isso é bom, pois economiza recursos do servidor e geralmente tem um desempenho melhor. A declaração preparada "emulação" sempre escapará das coisas corretamente.
22420 MarkR
1
"sempre" e "escapando" são palavras perigosas quando caminhamos juntos. não sei, talvez esse código esteja totalmente livre de erros; mas por que se preocupar, quando um protocolo binário real está disponível? quanto ao desempenho, isso é aberto a comparações.
Javier