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.
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:
mysql_*()
agora está obsoleto e será removido em breve. Você não deve usá-lo para novo código.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:
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:
* 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
fonte
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.
fonte
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.
fonte
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.
fonte
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?
fonte