segunda-feira, 4 de outubro de 2010

Campos interessantes em um banco de dados MySQL

Campos Interessantes



Como mencionei em um post anterior eu gosto de colocar um id como primeiro campo em qualquer banco de dados. Isto facilita a indexação e a atualização (usando comando REPLACE) de cada ficha no banco de dados.

Outro campo que eu gosto de acrescentar, sempre que crio um banco de dados de pessoas (membros) é um campo de "nível" (level). Normalmente eu coloco com um inteiro, e uso como um conjunto de bits (8 ou 16), onde cada bit pode dar acesso a alguma coisa.

Normalmente crio uma área do site que todas as pessoas possam ter acesso. Uma área anônima, por assim dizer. Depois eu crio outra área que apenas as pessoas identificadas (pelo login) tem acesso. Outras áreas são restritas a gerentes e/ou pagantes, ou ao dono.

Cada área tem um bit associado no campo de nível. Se o bit estiver setado, o membro tem acesso. Se o bit estiver resetado, o membro não tem acesso. Acesso negado.

É claro que depende do caso, mas muitas vezes o acréscimo deste campo elimina a necessidade de ter outras tabelas apenas para administradores. No caso, o administrador é cadastrado normalmente, apenas com os bits de nível setados, para dar acesso a mais áreas do site.

sábado, 2 de outubro de 2010

Utilizando PHP para consultar um banco MySQL


Utilizando PHP para consultar um banco MySQL


Primeiramente uma advertência em relação aos dados de acesso ao banco de dados. Para acessar o banco de dados é necessário informar o nome do computador, do usuário, e sua senha. Minha sugestão em questão de segurança é não colocar estas informações diretamente nos programas PHP. Imagine o que acontece se o servidor web for ativado sem o interpretador PHP? Suas informações de nome e senha para acesso ao banco de dados serão vistos por todos que tentarem acessar suas páginas.

Uma forma bem mais segura é definir variáveis e coloca-las em um arquivo que fica fora da árvore do servidor web. Esse arquivo deve ser incluído (include("arquivo");) pelo PHP. Se o PHP não estiver funcionando, aparecerá nas páginas web apenas o nome das variáveis, mas não o seu conteúdo, preservando assim sua senha e seu login.

Os comandos mais comuns do PHP para acessar um banco de dados MySQL são os seguintes:

  1. $link = mysql_connect ($host_name, $user, $password) or die ("Erro ao conectar ao banco de dados.\n");
  2. mysql_select_db($banco_de_dados, $link) or die ("Erro ao selecionar banco de dados.\n");
  3. $result = mysql_query ("CREATE TABLE IF NOT EXISTS `$tabela` ('id'  bigint(20) unsigned NOT NULL auto_increment, 'login' varchar(20) default NULL, 'nome' varchar(40) default NULL, 'senha'  varchar(20) default NULL, "PRIMARY KEY  (`id`) ) ");
  4. $result = mysql_query ("SELECT * FROM $tabela WHERE id = '$id' ");
  5. $quantidade = mysql_num_rows($result);
  6. $ficha = mysql_fetch_array ($result);
  7. $result = mysql_query ("INSERT INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);
  8. $result = mysql_query ("REPLACE INTO $tabela VALUES ('$id', '$login', '$nome', '$senha') ", $link);

O primeiro comando faz a conexão com o servidor MySQL.
O segundo comando seleciona o banco de dados no servidor.
O terceiro comando é utilizado caso queira criar uma tabela no banco de dados.
O quarto comando seleciona dados do banco de dados onde o id da ficha é igual à variável $id.
O quinto comando seta a variável $quantidade igual ao número de fichas encontrado na busca
O sexto comando coloca na variável $ficha (como array de dados) todos os campos lidos da ficha de dados.
O sétimo comando cria uma nova ficha de dados no banco de dados previamente selecionado.
O oitavo comando substitui uma ficha de dados existente no banco de dados previamente selecionado.

Banco de Dados MySQL


Banco de Dados MySQL



Em algumas ocasiões é interessante fazer consulta a um banco de dados para prover algum conteúdo dinâmico, atualizado. Isso é muito fácil utilizando páginas em PHP.

Um banco de dados em MySQL é composto por tabelas, contendo fichas que contém diversos campos. Repetindo: cada tabela contém um grupo de fichas. Cada ficha é composto por diversos campos. O banco de dados mais simples poderá ter apenas uma tabela.

Um exemplo típico de uma tabela é a que contém fichas de cadastro. Os campos na ficha poderão ser, por exemplo: id, login, senha, nome completo, rua, número, complemento, bairro, cep, cidade, estado, país, telefone, celular, nacionalidade, naturalidade, cpf, rg, sexo, conjuge, data de nascimento, etc. etc. conforme a aplicação.

Como pode ser observado, os diversos campos podem ser compostos por tipos de informação diferentes. Os tipos mais comuns são: int (usado para números inteiros), float (ponto flutuante), double (ponto flutuante dupla precisão), date (datas), var char (texto).

Uma dica que eu aprendi depois de criar vários bancos de dados, é que fica mais fácil encontrar e editar os dados posteriormente se o primeiro campo for um índice numérico, auto-crescente.

Agora eu normalmente coloco um "bigint", "auto increment", como o primeiro campo, e depois utilizo este valor quando eu quero editar e salvar modificações no banco de dados. Anteriormente eu utilizava um campo como o nome ou login para indexar o banco. Mas em algumas ocasiões é conveniente modificar o login, e nestes casos, o comando de substituir ("REPLACE") não funciona mais, e acaba criando uma nova ficha. Se usarmos um índice auto-crescente, não podem existir 2 índices iguais, e podemos utiliza-lo para fazer a substituição.