Stored Procedure Com PHP E MySQL

Há um tempo atrás publicamos várias matérias sobre o uso do Stored Procedure, porém, relacionados ao SQL.

Hoje estaremos publicando alguns comandos essenciais para seu uso junto ao MySQL.

Se você está começando agora em programação web e não sabe o que é Stored Procedure, falarei um pouco sobre ele abaixo antes de focarmos no assunto. ok?

O Que É Stored Procedure?

O Stored Procedure é uma coleção de comandos em SQL que tem por finalidade encapsular tarefas repetitivas, aceitando parâmetros de entrada e retornando um valor de status (para indicar aceitação ou falha na execução).

O procedimento armazenado pode reduzir o tráfego na rede, melhorar a performance, criar mecanismos de segurança, etc.

Geralmente o uso desta ferramenta é simple e facilita bastante o trabalho do Programador!

Abaixo vamos mostrar um exemplo simples que poderá facilitar e muito a vida de qualquer programador.

Estude, teste em seu Servidor e a partir dele, faça a adaptação para seus scripts!

Trabalhando Com A Stored Procedure

Agora que sabemos as vantagens em se usar um SP, vamos para um exemplo prático?

O exemplo que darei abaixo, pode ser usado em sistemas diversos, desde que seja corretamente customizado.

Criando as Tabelas:

Crie a tabela abaixo em sua base de dados, conforme o exemplo abaixo:


CREATE TABLE `cidade` (
  `id_cidade` int(11) NOT NULL auto_increment,
  `id_pais` int(11) default NULL,
  `nome` varchar(80) default NULL,
  `populacao` longtext,
  PRIMARY KEY  (`id_cidade`)
) TYPE=MyISAM;

DROP TABLE IF EXISTS `pais`;
CREATE TABLE `pais` (
  `id_pais` int(11) NOT NULL auto_increment,
  `nome` varchar(80) NOT NULL default '0',
  `idioma` varchar(50) default NULL,
  PRIMARY KEY  (`id_pais`)
) TYPE=MyISAM;

Após criar as tabelas, vamos a um exemplo básico de stored procedure?

Criando a Stored Procedure:



DELIMITER $$

DROP PROCEDURE IF EXISTS `listar_paises` $$

CREATE PROCEDURE `listar_paises`(IN _id INT)

BEGIN
      IF(_id IS NULL) THEN
        SELECT * FROM pais;
      ELSE
        SELECT *  FROM pais where id_pais = _id;
      END IF;
   END $$
DELIMITER ;

Vamos entender como funciona?

  • DELIMITER $$ – Servirá para informar onde começa e termina o sistema.
  • DROP PROCEDURE – Para excluir uma procedure, o procedimento é simples: Basta utilizar a cláusula “DROP PROCEDURE”, conforme o exemplo acima.
  • CREATE PROCEDURE – Essa é a parte onde solicitarei ao Sistema para criar uma Procedure, disponibilizando entre o BEGIN (que informará onde inicia) e END (que informará onde termina) os parâmetros.

Bem… eu já criei minha base de dados e criei junto ao phpMyAdmin a SP (conforme imagem a seguir).

Veja que no próprio phpMyADmin você terá a chance de testar o parâmetro criado, criando seu próprio código em PHP!

Abaixo vamos dar alguns exemplos para você implementar em seus scripts, ok?

Usando O PHP

Para efetuar uma conexão através do script em PHP, o procedimento também é básico. Basta seguir os detalhes descritos no código (conforme trecho abaixo):


<?php

class MySQL {
                var $host = 'localhost';
                var $usr = 'quemuel_quemuel';
                var $pw  = 'quemuel123';
                var $db  = 'quemuel_procedure';

                var $sql; // Query - instrução SQL
                var $conn; // Conexão ao banco
                var $resultado; // Resultado de uma consulta

                function MySQL() {
                }

                // Esta função conecta-se ao banco de dados e o seleciona.
                function connMySQL() {
                               $this->conn = mysqli_connect($this->host, $this->usr, $this->pw, $this->db);
                               if (!$this->conn) {
echo "<p>Não foi possível conectar-se ao servidor MySQL.</p>\n" .
"<p><strong>Erro MySQL: " . mysqli_connect_error() . "</strong></p>\n";
                                               exit();
                               } elseif (!mysqli_select_db($this->conn, $this->db)) {
                                               echo "<p>Não foi possível selecionar o Banco de Dados desejado.</p>\n" .
"<p><strong>Erro MySQL: " . mysqli_error($this->conn) . "</strong></p>\n";
                                               exit();
                               }
                }

// Função para executar SPs (Stored Procedures). Utiliza-se a função mysqli_multi_query()
// porque as SPs retornam mais de um conjunto de resultados e a função mysqli_query() não consegue
// trabalhar com respostas múltiplas, ocasionando eventuais erros.
                function execSP($sql) {
                               $this->connMySQL();
                               $this->sql = $sql;
                               if (mysqli_multi_query($this->conn, $this->sql)) {
                                               $this->resultado = mysqli_store_result($this->conn);
                                               $row = mysqli_fetch_row($this->resultado);
                                               $this->closeConnMySQL();
                                               mysqli_free_result($this->resultado);
                                               return $row[0];
                               } else {
                                               echo "<p>Não foi possível executar a seguinte instrução “.
“SQL:</p><p><strong>$sql</strong></p>\n".
"<p>Erro MySQL: " . mysqli_error($this->conn) . "</p>";
                                               exit();
                                               $this->closeConnMySQL();
                               }
                }

                //Função para encerramento da conexão com o banco de dados.
                function closeConnMySQL() {
                               return mysqli_close($this->conn);
                }
} // Finaliza a classe MySQL

//Instancia novo objeto da classe MySQL.
$mySQL = new MySQL;

?>

IMPORTANTE: Para usar as funcionalidades de Stored Procedure do MySQL, você deverá incluir a linha a seguir no “PHP.INI”:

“extension=php_mysqli.dll”.

Obs.: A DLL também deverá estar habilitada.

Em Servidores web com o CPanel, geralmente já vem configurado! Se for outra estrutura é necessário configurar manualmente.

- Para evitar erros, trabalhe na estrutura LAMP, pois nela você terá suporte ao PHP 5 e MySQL 5. Em outras versões poderá dar erro.

Bem… este foi apenas um pontapé inicial para iniciarmos os trabalhos com o Stored Procedure.

Nas próximas edições estaremos explorando o comando “CALL” e postando informações detalhadas que com certeza lhe ajudarão em seus Projetos.

Download do código usado neste tutorial: Store Procedure Com PHP E MySQL

Be Sociable, Share!

3 Comentários

  1. Gostei do tutorial. Ficaria melhor se o código fosse mais explicado e organizado. Por exemplo: mysqli_free_result é…

  2. marcelo

    Achei excelente esse tutorial, mais gostaria de saber como eu faço para colocar o resultado na minha tela index.php. Tentei assim mais não exibe nada … nem mesmo erro. Alguma dica ?

    <?php//Conexao com Banco de Dados// Fazemos nosso include da nossa classeinclude 'proc.php';//Instancia novo objeto da classe MySQL.$mySQL = new MySQL;$mySQL->execSP("call busca();");echo $mySQL->resultado;
    ?>

  3. Christyan

    Bom dia,
    Tenho uma duvida, criei a stored procedure certinha, mas nesse uso no php aonde vc passa o nome da stored procedure que voce criou ?
    Desde já agradeço a atenção.

Participa! Comenta...