Trabalhando com PHP e MySQL

Nesta lição, veremos juntos como é possível fazer com que nossas páginas PHP interajam com os bancos de dados MySQL . Por uma questão de integridade, não podemos esquecer que o PHP é capaz de conectar-se a diferentes servidores de banco de dados (MySQL, MS Access, PostgreSql, Oracle, Microsoft Sql Server, Sybase, …), no entanto, nos limitaremos a ver a interação com o MySQL que é sem dúvida a solução mais comum e difundida.

Se você não tem muito conhecimento eu recomendo que faça o curso php do zero ao profissional que você irá aprender tudo de php.

Trabalhando com PHP / MySQL

O MySQL é um banco de dados rápido e poderoso, capaz de gerenciar aplicativos com um alto grau de criticidade e, não menor, é um software de código aberto, disponível para download gratuito no site www.mysql.com.

Como mencionamos na lição anterior, o PHP fornece ao desenvolvedor várias funções para interagir com os bancos de dados MySQL. Vamos ver o mais importante juntos.

Conecte-se a um banco de dados MySQL

Primeiro, vamos ver como o PHP se conecta ao servidor MySQL. Para esse propósito, a função mysql_connect () usada com a seguinte sintaxe é suportada:

mysql_connect(server, utente, password);

Por exemplo:

$myconn = mysql_connect('localhost', 'pippo', 'xxxxxx') or die('Errore...');

observe o uso do comando die () cujo objetivo é, no caso de um erro, parar de processar o script e imprimir uma mensagem na tela.

Esta operação – conexão com o servidor MySQL – deve ser considerada preliminar para qualquer outra operação nos bancos de dados. Após a conclusão das operações no banco de dados, é possível fechar a conexão ao servidor explicitamente usando a função mysql_close () desta maneira:

mysql_close($myconn);

Selecione um banco de dados

Depois que a conexão for estabelecida, é necessário selecionar um banco de dados específico no qual trabalhar. Para esse fim, o PHP nos fornece a função mysql_select_db () a ser usada com a seguinte sintaxe:

mysql_select_db(database, connessione);

Por exemplo:

mysql_select_db('mio_database', $myconn) or die('Errore...');

Faça uma consulta

Primeiro, vemos como é possível recuperar (ler) os dados em nosso banco de dados. Para fazer isso, devemos formular e executar uma consulta , que consiste em uma consulta que o desenvolvedor endereça ao banco de dados usando a linguagem SQL. Para fazer isso, use a função mysql_query () com a seguinte sintaxe:

mysql_query(query, connessione);

Por exemplo:

$query = "SELECT * FROM tabella WHERE id > 100";
$result = mysql_query($query, $myconn) or die('Errore...');

Observe que a indicação de conexão é opcional; se omitido, o script usará a última conexão aberta.

Leia os registros retornados por uma consulta SELECT

Depois de “recuperar” os dados do banco de dados usando um SELECT , teremos que nos preocupar em alterná-los, por exemplo, para imprimi-los na tela. Para esse propósito, precisaremos de várias outras funções, como, por exemplo, mysql_num_rows () e mysql_fetch_rows () .

Vamos ver um exemplo completo: digamos que queremos recuperar uma série de dados (nome, sobrenome e telefone) da tabela “friends” e desejá-los imprimi-los na tela para cada ocorrência encontrada em nosso banco de dados. Aqui está o código completo do nosso script PHP devidamente comentado:

<?php
// mi connetto al MySql Server
$myconn = mysql_connect('localhost', 'pippo', 'xxxxxx') or die('Errore...');

// seleziono il database degli amici
mysql_select_db('database_degli_amici', $myconn) or die('Errore...');

// imposto ed eseguo la query
$query = "SELECT nome, cognome, telefono FROM amici ORDER BY cognome ASC";
$result = mysql_query($query, $myconn) or die('Errore...');

// conto il numero di occorrenze trovate nel db
$numrows = mysql_num_rows($result);

// se il database è vuoto lo stampo a video
if ($numrows == 0){
  echo "Database vuoto!";
}
// se invece trovo delle occorrenze...
else
{
  // avvio un ciclo for che si ripete per il numero di occorrenze trovate
  for ($x = 0; $x < $numrows; $x++){
    
    // recupero il contenuto di ogni record rovato
    $resrow = mysql_fetch_row($result);
    $nome = $resrow[0];
    $cofgnome = $resrow[1];
    $telefono = $resrow[2];

    // stampo a video il risultato
    echo "nome: <b>" . $nome . "</b><br/>";
    echo "cognome: <b>" . $cognome . "</b><br/>";
    echo "telefono: <b>" . $telefono . "</b>";
  }
}

// chiudo la connessione
mysql_close($myconn);
?>

O que fizemos acima deve ser suficientemente claro (lembra-se da lição sobre ciclos?) … Resta, portanto, esclarecer apenas o significado de duas funções específicas que usamos:

  • mysql_num_rows () – serve para contar o número de registros encontrados em nosso banco de dados com base em uma determinada consulta;
  • mysql_fetch_row () – Recupera o conteúdo dos registros encontrados. Mais precisamente, ele retorna uma matriz que contém os valores de cada campo encontrado no conjunto de registros, dos quais podemos recordar especificando o índice numérico relativo.

Abaixo, para completar, algumas considerações sobre o código do nosso exemplo.

Como alternativa ao mysql_fetch_row () , poderíamos ter usado mysql_fetch_assoc () ; nesse caso, os dados do conjunto de registros seriam recuperáveis, indicando o nome do campo (em vez do índice numérico). Por exemplo:

// usando mysql_fetch_rows() abbiamo scritto...
$nome = $resrow[0];

// ...usando mysql_fetch_assoc() avremmo scritto
$nome = $resrow['nome'];

Finalmente, como uma alternativa para esses dois, poderíamos ter usado mysql_fetch_array (), que suporta as duas técnicas de chamada sem distinção.

Novamente, em nosso exemplo, fizemos o ciclo do conjunto de registros usando um loop for comum, mas poderíamos ter usado, talvez mais corretamente, mesmo assim :

// ...

if ($numrows == 0){
  echo "Database vuoto!";
}
else
{
  while ($resrow = mysql_fetch_row($result)) {
    $nome = $resrow[0];
    $cofgnome = $resrow[1];
    $telefono = $resrow[2];

    // Stampo a video il risultato
    // ...  
  }
}

// ...

Esboço do SQL: INSERT INTO, UPDATE e DELETE

Finalmente, vemos brevemente como executar outras operações importantes do banco de dados através dos comandos SQL mais comuns.

Com INSERT INTO, novos dados são inseridos no banco de dados, os dados UPDATE já atualizados são atualizados e os dados DELETE são excluídos.

Do ponto de vista do PHP, essas operações não diferem entre si, a única coisa que muda é a consulta executada, mas esse discurso diz respeito à linguagem SQL. Vamos dar alguns exemplos:

Para INSERT INTO, usaremos:

mysql_query("INSERT INTO tabella VALUES('valore1','valore2','valore3')");

Para UPDATE, usaremos:

mysql_query("UPDATE tabella SET campo1='valore1', campo2='valore2', campo3='valore3' WHERE id = 1");

Para DELETE, usaremos:

mysql_query("DELETE FROM tabella WHERE id = 1");

Aviso! se nas consultas UPDATE e DELETE não usarmos a cláusula “WHERE”, todos os registros db serão atualizados / excluídos!

Vamos dar um exemplo de uso dessas consultas; vamos ver como excluir o PHP com um registro do nosso banco de dados MySQL:

<?php
// mi connetto al server MySQL
$myconn = mysql_connect('localhost', 'pippo', 'xxxxxx') or die('Errore...');

// mi connetto al database degli amici
mysql_select_db('database', $myconn) or die('Errore...');

// imposto ed eseguo la query
$query = "DELETE FROM tabella WHERE id = 1";
$result = mysql_query($query, $myconn) or die('Errore...');

// chiudo la connessione
mysql_close($myconn);
?>

Para outras operações, será suficiente substituir a consulta, mantendo a estrutura do código PHP.

Atualização: as novas funções MySQLi e PDO_MySQL

Nesta lição, foram apresentadas várias funções da família mysql_ * que, no entanto, são consideradas obsoletas nas versões mais recentes do PHP em favor das funções mais modernas do MySQLi e PDO_MySQL .

Quanto à família de funções mysqli_ * , felizmente, a transição é bastante simples porque (mantendo o estilo de programação procedural) será suficiente alterar o prefixo “mysql_” em “mysqli_” para continuar usando a maioria dos nossos scripts antigos.

Quanto ao PDO_MySQL, convido você a ler nosso breve guia sobre o uso do PDO.