Publicidade (Anuncie Aqui)

PHP e MySQL para iniciantes – Consulta Simples

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!

Você também vai gostar de ler:

Postado em MySQL, PHP, Tutoriais

Com as tags , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

View Comments

  1. Helder disse:

    De nada, continuação de excelente trabalho.

  2. Thiago Belem disse:

    Tentarei fazer algo sobre :)

  3. Alessandropires disse:

    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??

  4. Anielly disse:

    Adoreeii !! (=

  5. Thiago Belem disse:

    Helder,

    O seu comentário fez todo sentido e me fez mudar de idéia… Irei editar o
    tutorial e fazê-lo usando MySQLi. :)

    Obrigado e um grande abraço!

  6. Thiago Belem disse:

    O artigo foi editado… Agora usaremos MySQLi

    Obrigado pela dica! :)

  7. Daniel Ribeiro Gomes disse:

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

    Abraços do colega colunista do iMasters.

  8. Helder disse:

    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.

  9. Obrigado, tinha uma leve impressão de que era esse programa, instalei ontem mesmo e testei, bem legal.. eu só usava o MySQL Gui Tools

  10. Danilo O programa é o MySQL Workbench

    pode baixar no site da mysql mesmo http://wb.mysql.com/

  11. Thiago Belem disse:

    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.. :)

  12. Carlos André Ferrari disse:

    Kra, só acho que o tutorial deveria ser feito usando PDO, mas tá massa

  13. Aeeeee, Thiago não morreu rsrs

    Brincadeiras a parte ótimo post, bem explicado e simples.

    Parabéns

  14. Só por curiosidade, qual o programa que você usou para gerar aquela imagem de relacionamentos?

blog comments powered by Disqus