PHP está em constante evolução e prova disso são as novidades que vamos comentar neste artigo. Se trata das novas funções de acesso a bases de dados MySQL que estão disponíveis a partir de PHP 5, com nomes diferentes das funções disponíveis no passado e que também têm algumas mudanças no modo de trabalhar. As novas funções foram criadas para dar resposta a diversas melhorias que o sistema gestor de bases de dados MySQL incorporou recentemente.
Este é um assunto fundamental, sobretudo para as pessoas que conhecem PHP há tempo, que como eu, estávamos acostumados a usar um jogo de funções que atualmente se encontra obsoleto e que não se recomenda utilizar. Realmente, no momento de escrever este artigo as funções de MySQL antigas ainda, se podem usar, mas a previsão é que sejam eliminadas em PHP 5.5, razão pela qual é imprescindível atualizar nossos conhecimentos.
Felizmente, é bastante simples o passo para as novas funções de MySQL, uma vez que o esquema de funcionamento é praticamente o mesmo, assim como os novos nomes de funções, que têm muito poucas variações. Portanto, se você leu o Manual de PHP de CriarWeb.com e aprendeu conosco a trabalhar com as bases de dados, não terá realmente muitos problemas em aprender as novidades que passo a relatar a continuação.
Dois tipos de funções para acesso às bases de dados MySQL
Uma das novidades que PHP nos oferece nas recentes funções de PHP é a incorporação de dois tipos de aproximações ao trabalho com MySQL, que agora pode ser feita por procedimentos (funções normais de sempre) e por objetos.
Nota: Antes só podíamos acessar MySQL por funções comuns, Mas agora também podemos acessar por meio de classes e objetos de programação orientada a objetos (POO). A incorporação no API de métodos baseados em POO torna patente que PHP está tendo muito presente este paradigma de desenvolvimento dentro de seu núcleo e que a tendencia nas nuevas versões de PHP será a de potencializá-lo ainda mais.
Funções baseadas em procedimentos: Como vimos fazendo desde sempre com PHP.
Funções normais e correntes, que recebem parâmetros e que retornam valores.
Funções baseadas em POO: Realmente são construtores para obter objetos e métodos aos que podemos acessar dentro desses objetos para realizar as operações com a base de dados.
Há que esclarecer que ambas aproximações são perfeitamente válidas e que não mudam as coisas que podem ser feitas de uma ou outra. Portanto, elogiar um ou outro modo não implicará em nenhuma vantagem em funcionalidade, nem sequer de rendimento. Na verdade, ambos modos de trabalho são o"mesmo cachorro com diferente coleira". Portanto, é tão válida uma escolha quanto a outra e nossa preferência será mais por gosto ou costume à hora de desenvolver.
Nota: O que não se recomenda em um mesmo projeto é mudar de um outro estilo de acesso à base de dados MySQL de maneira arbitrária. Devemos ter em conta que realmente essa recomendação não se deve a que seu programa não vai funcionar, ou que você possa ter algum problema determinado, mas que é uma questão de estilo e clareza à hora de manter o código de seu proyeto.
Acesso a MySQL com funções por procedimentos
No mencionado Manual de PHP vimos oferecendo exemplos para acesso à base de dados com funções desde sempre. Por isso, neste artigo vamos mostrar as diferenças que existem relacionadas às funções antigas, usando também código por procedimentos. Contudo, como você verá a seguir, as funções são praticamente as mesmas às que se acrescentou um "i". Por exemplo, mysql_connect() passa a ser mysqli_connect(). Os parâmetros são os mesmos em muitos casos, ou muito parecidos.
Nota: este artigo não é um tutorial de acesso a bases de dados com PHP, para isso já dispomos do manual de PHP em CriarWeb.com. Realmente se trata de uma serie de guias para poder reciclar nossos conhecimentos com o PHP de versões anteriores.
Conexão com a base de dados: mysqli_connect()
Agora indicamos também a base de dados à que nos queremos conectar. E atenção, porque o que nos retorna a função não é um link ou identificador da conexão com a base de dados, mas um objeto. Porém, mesmo que você não saiba POO, não se preocupe com este detalhe, pois pouco importa aos desenvolvedores, dado que vamos usar esse objeto como se fosse simplesmente o identificador da conexão, ou seja, vamos usá-lo como fazíamos anteriormente em PHP.
$conexao = mysqli_connect("localhost", "usuario", "chave", "meu_bbdd");
Fechar a conexão: mysqli_close()
Temos que passar como parâmetro sempre o objeto que obtivemos ao iniciar a conexão.
mysqli_close($conexao);
Executar uma consulta: mysqli_query()
Esta função é exatamente igual, embora neste caso recebe obrigatoriamente como primeiro parâmetro o objeto de conexão à base de dados que recebemos ao nos conectarmos. O segundo parâmetro é a sentença SQL que se deseja executar em MySQL.
$resultado = mysqli_query($conexao, "select * from cliente");
Outro aspecto interessante é que nos retorna um valor que pode ser, ou um booleano para saber se a consulta foi executada com sucesso, como no caso de um "insert" ou "delete", ou então um objeto resultado com um conjunto de registros no caso de um "select".
Extrair um registro do conjunto de resultados:
mysqli_fetch_array()
mysqli_fetch_array()
Esta função é exatamente igual, recebe o conjunto de resultados do que queremos extrairr um registro. Retorna neste caso um "array", mas está igualmente mysqli_fetch_object() que retornaría um objeto.
$fila = mysqli_fetch_array($resultado);
Contar o número de filas de um resultado:
mysqli_num_rows()
mysqli_num_rows()
Também é exatamente igual, simplesmente lhe passamos o objeto conjunto de registros do que queremos saber o número de filas ou registros que contém.
$fila = mysqli_num_rows($resultado)
Conclusão
Em geral, como você está podendo comprovar, o sistema não varia muito em relação ao que você já conhecia. Mudam nomes de funções minimamente e algum parâmetro solto aqui e ali.
Creio que o passo para usar as novas funções MySQL é tão rápido que não tem sentido continuar usando as funções antigas e, ademais, em breve a mudança será obrigatória porque os acessos antigos que fazíamos a MySQL deixaram de funcionar.