Resumo : neste tutorial, você aprenderá como chamar um procedimento armazenado MySQL usando o PHP PDO.
Configurando um procedimento armazenado no MySQL
Para executar uma instrução no banco de dados MySQL, você pode usar qualquer ferramenta cliente MySQL, por exemplo, ferramenta cliente mysql ou MySQL Workbench.
Primeiro, insira os dados na authors
tabela executando a seguinte INSERT
instrução:
INSERT INTO books(title, isbn, published_date,publisher_id)
VALUES
('Goodbye to All That','9781541619883','2013-01-05', 3),
('The Mercies','9780316529235','2020-01-28', 3),
('On the Farm','9780763655914','2012-03-27', 2),
('Joseph Had a Little Overcoat','9780140563580','1977-03-15', 2);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que a publishers
tabela deve ter linhas com id 2 e 3. Caso contrário, você pode executar o script que insere linhas na publishers
tabela.
Segundo, execute a seguinte CREATE PROCEDURE
instrução para criar um novo procedimento armazenado chamado get_books_published_after
:
USE `bookdb`;
DELIMITER $$
USE `bookdb`$$
CREATE PROCEDURE `get_books_published_after` (IN published_year INT)
BEGIN
SELECT
book_id, title, isbn, published_date, name as publisher
FROM
books b
INNER JOIN publishers p
ON p.publisher_id = b.publisher_id
WHERE year(published_date) > published_year;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O procedimento armazenado get_books_published_after
retorna todos os livros publicados após um ano específico.
Terceiro, execute o procedimento armazenado para verificar o conjunto de resultados:
CALL get_books_published_after(2010);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução retorna o seguinte conjunto de resultados:
+---------+---------------------+---------------+----------------+----------------------+
| book_id | title | isbn | published_date | publisher |
+---------+---------------------+---------------+----------------+----------------------+
| 1 | Goodbye to All That | 9781541619883 | 2013-01-05 | Hachette Book Group |
| 2 | The Mercies | 9780316529235 | 2020-01-28 | Hachette Book Group |
| 3 | On the Farm | 9780763655914 | 2012-03-27 | Penguin/Random House |
+---------+---------------------+---------------+----------------+----------------------+
3 rows in set (0.005 sec)
Linguagem de código: texto simples ( texto simples )
Chamando um procedimento armazenado MySQL de PHP usando PDO
O script a seguir ilustra como chamar o get_books_published_after
procedimento armazenado:
<?php
$published_year = 2010;
// connect to the database and select the publisher
$pdo = require 'connect.php';
$sql = 'CALL get_books_published_after(:published_year)';
$publishers = [];
$statement = $pdo->prepare($sql);
$statement->bindParam(':published_year', $published_year, PDO::PARAM_INT);
$statement->execute();
$publishers = $statement->fetchAll(PDO::FETCH_ASSOC);
print_r($publishers);
Linguagem de código: HTML, XML ( xml )
Como funciona.
Primeiro, crie uma nova conexão com o banco de dados MySQL :
$pdo = require 'connect.php';
Linguagem de código: PHP ( php )
Segundo, construa uma instrução SQL que chame o get_books_published_after
procedimento armazenado:
$sql = 'CALL get_books_published_after(:published_year)';
Linguagem de código: PHP ( php )
A instrução aceita um espaço reservado nomeado :published_year
para que você possa vincular um valor a ele posteriormente.
Terceiro, crie uma instrução preparada chamando o prepare()
método da instância PDO:
$statement = $pdo->prepare($sql);
Linguagem de código: PHP ( php )
Quarto, vincule um valor à instrução:
$statement->bindParam(':published_year', $published_year, PDO::PARAM_INT);
Linguagem de código: PHP ( php )
Quinto, execute a chamada do procedimento armazenado:
$statement->execute();
Linguagem de código: PHP ( php )
Como o procedimento armazenado retorna um conjunto de resultados, você pode buscar cada linha do conjunto de resultados em uma matriz associativa usando o fetchAll()
método:
$publishers = $statement->fetchAll(PDO::FETCH_ASSOC);
Linguagem de código: PHP ( php )
Resumo
- Use uma instrução preparada para chamar um procedimento armazenado MySQL do PHP.