Chame um procedimento armazenado MySQL usando PHP PDO

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 authorstabela executando a seguinte INSERTinstruçã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 publisherstabela deve ter linhas com id 2 e 3. Caso contrário, você pode executar o script que insere linhas na publisherstabela.

Segundo, execute a seguinte CREATE PROCEDUREinstruçã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_afterretorna 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_afterprocedimento 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_afterprocedimento 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_yearpara 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *