Alguns ElePHPants na praia

PHP e MySQL para iniciantes – Consulta Simples

Fala minha gente!

Hoje consegui um tempinho para voltar a postar no blog e resolvi voltar um com uma sequencia de tutorias básicos sobre MySQL + PHP para iniciantes.

Nessa primeira parte vamos criar um script que irá resgatar as notícias de um banco de dados e fazer mais alguns procedimentos.

Vamos usar MySQLi ao invés de MySQL. Mesmo sendo um recurso avançado para alguns, é bom ensinar uma forma correta e segura de trabalhar pra quem tá começando. :)

• Saiba mais sobre o MySQLi aqui e aqui

• Os recursos utilizando aqui (MySQLi) só funcionam em PHP 5+ e MySQL 4.1+

Essas serão as tabelas que iremos utilizar nesse e nos próximos tutoriais:

Tabelas notícias e categorias

Iremos usar essas tabelas para armazenar notícias que estarão ligadas à categorias.

  • Cada notícia pertence a uma categoria
  • Cada categoria contém zero ou mais notícias

A imagem acima foi criada utilizando o MySQL Workbench, uma ótima ferramenta de modelagem de banco de dados.

Para criar essas tabelas em seu banco de dados, execute esse código SQL:

-- -----------------------------------------------------
-- Table `categorias`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `categorias` ;

CREATE  TABLE IF NOT EXISTS `categorias` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(50) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = MyISAM;

-- -----------------------------------------------------
-- Table `noticias`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `noticias` ;

CREATE  TABLE IF NOT EXISTS `noticias` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `categoria_id` INT UNSIGNED NOT NULL ,
  `titulo` VARCHAR(100) NOT NULL ,
  `descricao` TEXT NOT NULL ,
  `texto` LONGTEXT NOT NULL ,
  `ativa` TINYINT(1)  NOT NULL DEFAULT 1 ,
  `cadastro` DATETIME NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `CATEGORIA` (`categoria_id` ASC) ,
  CONSTRAINT `FK_CATEGORIA`
    FOREIGN KEY (`categoria_id` )
    REFERENCES `categorias` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = MyISAM;

Vamos iniciar o nosso script criando um pequeno script de conexão ao banco de dados:

<?php
/**
 * PHP e MySQL para iniciantes
 *
 * Arquivo que faz a conexão com o banco de dados utilizando MySQLi
 *
 * PHP 5+, MySQL 4.1+
 *
 * @author Thiago Belem <contato@thiagobelem.net>
 * @link http://blog.thiagobelem.net/mysql/php-e-mysql-para-iniciantes-consulta-simples/
 */

// Dados de acesso ao servidor MySQL
$MySQL = array(
	'servidor' => '127.0.0.1',	// Endereço do servidor
	'usuario' => 'root',		// Usuário
	'senha' => '',				// Senha
	'banco' => 'meu_site'		// Nome do banco de dados
);

$MySQLi = new MySQLi($MySQL['servidor'], $MySQL['usuario'], $MySQL['senha'], $MySQL['banco']);

// Verifica se ocorreu um erro e exibe a mensagem de erro
if (mysqli_connect_errno())
    trigger_error(mysqli_connect_error(), E_USER_ERROR);

?>

Na linha 21 nós criamos uma instância do MySQLi passando os dados de conexão com o servidor e, logo depois, verificamos se houve algum erro durante a conexão e exibimos a mensagem de erro.

Salve esse script com o nome de mysqli.php em uma pasta chamada includes.

O próximo passo será criar um script que faz uma consulta SQL, vamos começar o arquivo PHP com os comentários de créditos e o require para chamar o arquivo de conexão ao banco de dados:

<?php
/**
 * PHP e MySQL para iniciantes
 *
 * Arquivo com um exemplo de consulta ao banco de dados MySQL
 *
 * PHP 5+, MySQL 4.1+
 *
 * @author Thiago Belem <contato@thiagobelem.net>
 * @link http://blog.thiagobelem.net/mysql/php-e-mysql-para-iniciantes-consulta-simples/
 */

// Inclui o arquivo que faz a conexão ao banco de dados
require_once('includes/mysqli.php');

?>

Agora vamos montar uma consulta SQL simples para buscar as 10 últimas notícias ativas:

// Monta a consulta SQL para trazer as últimas 10 notícias ativas
$sql = 'SELECT *
		FROM `noticias` AS Noticia
		WHERE Noticia.`ativa` = 1
		ORDER BY Noticia.`cadastro` DESC
		LIMIT 10';

A consulta montada poderia ser traduzida por:

SELECIONE todas as colunas
DA TABELA `noticias`
ONDE `ativa` for igual a 1
ORDENANDO PELO `cadastro` DECRESCENTEMENTE
LIMITADO A 10 resultados

Agora precisamos executar a consulta utilizando o método query do MySQLi:

// Executa a consulta OU mostra uma mensagem de erro
$resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR);

E agora só precisamos rodar um loop, e em cada iteração (passada no loop) iremos exibir a notícia encontrada, montando um bloco HTML:

// Faz um loop, passando por todos os resultados encontrados
while ($noticia = $resultado->fetch_object()) {
	// Exibe a notícia dentro de um bloco HTML
	?>

	<h2><?php echo $noticia->titulo; ?></h2>
	<p><?php echo $noticia->descricao; ?></p>
	<p><a href="noticia.php?id=<?php echo $noticia->id; ?>" title="Continue lendo essa notícia">Leia mais &raquo;</a></p>

	<?php
} // while ($noticia = $resultado->fetch_object())

Fazendo isso, para cada notícia encontrada pela consulta, será criado o seguinte bloco HTML:

<h2>Titulo da notícia</h2>
<p>Descrição da notícia</p>
<p><a href="noticia.php?id=2" title="Continue lendo essa notícia">Leia mais &raquo;</a></p>

Depois disso, podemos colocar mais um pequeno bloco de código que irá mostrar o total de registros encontrados com a consulta:

// Exibe o total de registros encontrados
echo "<p>Registros encontrados: {$resultado->num_rows}</p>";

E no final de tudo precisamos – SEMPRE – liberar o resultado da consulta, limpando espaço na memória e deixando tudo mais organizado:

// Libera o resultado para liberar memória
$resultado->free();

O arquivo consulta.php ficou assim:

<?php
/**
 * PHP e MySQL para iniciantes
 *
 * Arquivo com um exemplo de consulta ao banco de dados MySQL
 *
 * PHP 5+, MySQL 4.1+
 *
 * @author Thiago Belem <contato@thiagobelem.net>
 * @link http://blog.thiagobelem.net/mysql/php-e-mysql-para-iniciantes-consulta-simples/
 */

// Inclui o arquivo que faz a conexão ao banco de dados
require_once('includes/mysqli.php');

// Monta a consulta SQL para trazer as últimas 10 notícias ativas
$sql = 'SELECT *
		FROM `noticias` AS Noticia
		WHERE Noticia.`ativa` = 1
		ORDER BY Noticia.`cadastro` DESC
		LIMIT 10';

// Executa a consulta OU mostra uma mensagem de erro
$resultado = $MySQLi->query($sql) OR trigger_error($MySQLi->error, E_USER_ERROR);

// Faz um loop, passando por todos os resultados encontrados
while ($noticia = $resultado->fetch_object()) {
	// Exibe a notícia dentro de um bloco HTML
	?>

	<h2><?php echo $noticia->titulo; ?></h2>
	<p><?php echo $noticia->descricao; ?></p>
	<p><a href="noticia.php?id=<?php echo $noticia->id; ?>" title="Continue lendo essa notícia">Leia mais &raquo;</a></p>

	<?php
} // while ($noticia = $resultado->fetch_object())

// Exibe o total de registros encontrados
echo "<p>Registros encontrados: {$resultado->num_rows}</p>";

// Libera o resultado para liberar memória
$resultado->free();

?>

Por hoje é só! :)

Faça o download de todos os arquivos desse tutorial: PHP-e-MySQL-Consulta-Simples.zip

Nas próximas partes desse tutorial iremos ver uma consulta mais complexa (ligando as duas tabelas) e outros scripts para cadastrar e editar notícias.

Um grade abraço e até a próxima!

23 thoughts on “PHP e MySQL para iniciantes – Consulta Simples

  1. giachini

    Thiago, como faço pra ver se há um aconexao ja existente, pra não ficar ai conectando toda a hora, tipo assim, verifica se há uma conexao existente, se há segue em frente, se não há conecta e segue.

    Muito bom o seu blog, e ja esta no meu Favoritos a muito tempo. sempre estou por aqui, valeu.

  2. Plinio

    Muito bons os Tutoriais aqui do blog, além de ser um conteudo praticamente raro, tratando-se de qualidade…
    Sou estudante do 1º ano de Informática, e como o curso não é focado em desenvolvimento pra web, desde o principio to me virando por conta propria, e seu blog tem sido muito útil!
    obrigado .

  3. Ruben

    Continuo lendo esse blog, tá servindo bem,
    mas gostaria que fizessem um tuto de como relacionar tabelas, quando devemos usar o relacionamento e como puxar o conteudo desse relacionamento no PHP

    Tem como? Grato. :)

  4. Alessandropires

    Opa..blz? Conheci teu blog e achei interessante…
    me chamou a atenção vc citar o MySQL Workbench…tem como criar um tópico ensinando a usá-lo??

  5. Daniel Ribeiro Gomes

    Até que enfim um artigo novo! Parabéns Thiago! Bem vindo de volta ao seu blog! Hehehe…

    Abraços do colega colunista do iMasters.

  6. Helder

    Tenho gostado muito dos tutoriais anteriores, mas este deixa alguma desilusão, há um retrocesso e até uma certa repetição. Não deveria usar-se apenas MYSQLI ou melhor ainda PDO ?? Apesar de ser para iniciantes é melhore começarem já pelas melhores práticas.

  7. Thiago Belem

    Essa sequencia de tutoriais foi criada para iniciantes… Haviam muitas dúvidas sobre “Como faço uma página de cadastro?” e resolvi fazer do começo.. :)

Comments are closed.