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):
conn = mysqli_connect($this->host, $this->usr, $this->pw, $this->db);
if (!$this->conn) {
echo "
Não foi possível conectar-se ao servidor MySQL.
\n" .
"
Erro MySQL: " . mysqli_connect_error() . "
\n";
exit();
} elseif (!mysqli_select_db($this->conn, $this->db)) {
echo "
Não foi possível selecionar o Banco de Dados desejado.
\n" .
"
Erro MySQL: " . mysqli_error($this->conn) . "
\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 "
Não foi possível executar a seguinte instrução “.
“SQL:
$sql
\n".
"
Erro MySQL: " . mysqli_error($this->conn) . "
";
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
3 Responses
Gostei do tutorial. Ficaria melhor se o código fosse mais explicado e organizado. Por exemplo: mysqli_free_result é…
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;
?>
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.