Erros MySQL: os mais frequentes

A base de dados é um componente fundamental na maioria das aplicações e sites na web. Se o seu site ou aplicação usa PHP, provavelmente a base de dados é MySQL. O MySQL é uma parte integrante do LAMP. Fique a conhecer os mais frequentes erros MySQL cometidos pelos programadores.

Erros MySQLO PHP é relativamente fácil e a maioria dos novos programadores conseguem criar código funcional em pouco tempo. No entanto, a associação a uma base de dados fiável e sólida leva algum tempo e necessita de experiência. Aqui estão alguns dos piores erros em MySQL (alguns aplicam-se a qualquer linguagem de programação / base de dados).

Utilizar o motor MyISAM em vez de InnoDB

O MySQL usa diversos motores de armazenamento mas os mais usuais são MyISAM e InnoDB.
O MyISAM é o mais usual. No entanto, a menos que a sua base de dados seja muito simples ou apenas para testes, este motor é a opção errada. O MyISAM não suporta restrições de chaves ou transações, que são essenciais para a integridade dos dados. E ainda, sempre que existem atualizações ou inserções nas tabelas, estas ficam bloqueadas o que pode causar problemas de desempenho.
A solução é simples: use sempre o InnoDB.

Usar funções MyISAM no PHP

O PHP tem funções do MySQL desde as suas primeiras versões. Muitas aplicações dependem do mysql_connect, mysql_query, mysql_fetch_assoc, etc, mas o manual do PHP diz:
Se a sua versão do MySQL é 4.1.3 ou superior é recomendável o uso da extensão mysqli.
O mysqli tem várias vantagens:
– é orientada a objetos;
– instruções preparadas (que ajudam a prevenir ataques de injeção de SQL e aumentar o desempenho);
– instruções múltiplas e suporte para transações;

Não tratar os inputs dos utilizadores

Esta deveria ser o número 1: nunca confie nos utilizadores. Valide cada input no lado do servidor, nunca fique dependente de JavaScript. Os ataques de injeção SQL simples dependem de, por exemplo:

$Username = $_POST [“nome”];
$Password = $_POST [“senha”];
$Sql = “SELECT UserID FROM UserTable WHERE username = ‘$username’ AND password = ‘$password’;”
/ / Executar a consulta …
Este pode ser alterado, introduzindo no campo username “admin’, #”. E a consulta SQL irá ser equiparada a:

SELECT UserID FROM UserTable WHERE username = ‘admin’;
Assim o utilizador desonesto pode efetuar o login como “admin” sem ser necessária a senha uma vez que foi comentada.

Não utilizar codificação UTF-8

O UTF-8 resolve muitos problemas de internacionalização. Apesar do PHP não o suportar a 100%, normalmente não surgem problemas de caracteres .

Não otimizar suas consultas

Grande parte dos problemas de desempenho do PHP são causados pelo mau desempenho da base de dados. Uma única consulta pode causar atrasos desnecessários na sua página.
Existem diversas ferramentas para o ajudar nos processos de optimização, o Query Profiler é uma delas.

Usar o * nas consultas SELECT

Não seja preguiçoso, nunca use o * para consultar todos os campos de uma tabela. Efetue pesquisas onde consulta apenas os campos necessários.

Indexação

Como regra os índices devem ser aplicados a qualquer campo da cláusula Where de uma pesquisa.
Por exemplo, na tabela UserTable com um ID númerico (chave primária) e um endereço de e-mail. Se durante, o processo de autenticação o MySQL tem de pesquisar o e-mail do utilizador, com um índice o resultado do processo é muito mais rápido. Sem índice o MySQL tem de verificar todos os registos sequencialmente até encontrar o e-mail.
Não use índices em todos os campos uma vez que estes são atualizados em UPDATE e INSERT na tabela. O uso de índices em demasia pode diminuir o desempenho do MySQL.

Cópias de segurança

É raro mas acontece, as base de dados podem-se corromper, os discos podem avariar, o seu fornecedor de alojamento pode falir… e assim perder as suas base de dados MySQL o que pode ser um catástrofe. Garanta sempre backups automatizados ou replicação local.

Saiba mais em www.mysql.com

Leave a comment



Miguel Fonseca

Contactos

Rua da Junqueira, 15-3 4490-519 Póvoa de Varzim

+351 934 975 835
mf@miguelfonseca.pt

© 2017 Todos os direitos reservados