Resumo : Neste tutorial, você aprenderá como chamar procedimentos armazenados do MySQL a partir do PHP, incluindo procedimentos armazenados que aceitam parâmetros IN e OUT.
Criando procedimentos armazenados
O seguinte cria um procedimento armazenado GetAllTasks()
que recupera todas as linhas da tasks
tabela:
DELIMITER $$
CREATE PROCEDURE GetAllTasks()
BEGIN
SELECT * FROM tasks;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O seguinte procedimento cria um procedimento armazenado GetTaskStatus()
que retorna o status de uma tarefa com base em seu ID:
DELIMITER $$
CREATE PROCEDURE GetTaskStatus(
in p_id int,
out p_completed bool
)
BEGIN
DECLARE task_status bool;
SELECT completed INTO p_completed
FROM tasks
WHERE id = p_id;
END$$
DELIMITER ;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Chamando procedimentos armazenados que retornam conjuntos de resultados
Para chamar um procedimento armazenado que retorna um conjunto de resultados, siga estas etapas:
- Primeiro, conecte-se ao banco de dados MySQL .
- Segundo, execute uma instrução que chame o procedimento armazenado usando o
query()
método. - Terceiro, busque todas as linhas do conjunto de resultados.
O seguinte script PHP ilustra como chamar o procedimento armazenado GetAllTasks()
:
<?php
require_once 'config.php';
try {
// connect to MySQL server
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// execute a query
$sql = 'CALL GetAllTasks()';
$stmt = $conn->query($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
// process the results
$tasks = [];
while ($row = $stmt->fetch()) {
$tasks[] = [
'title' => $row['title'],
'completed' => $row['completed'] == 0 ? false : true
];
}
// display the task list
require 'select.view.php';
} catch (PDOException $e) {
die($e);
}
Linguagem de código: PHP ( php )
Chamando procedimentos armazenados com um parâmetro OUT
O script a seguir chama o GetTaskStatus()
procedimento armazenado que aceita um ID de tarefa e retorna o status da tarefa:
<?php
require_once 'config.php';
try {
// connect to MySQL server
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// call the GetTaskStatus
$sql = 'CALL GetTaskStatus(:id, @task_status)';
$stmt = $conn->prepare($sql);
// bind the task id
$task_id = 1;
$stmt->bindParam(':id', $task_id, PDO::PARAM_INT);
// execute the query & close the cursor
$stmt->execute();
$stmt->closeCursor();
// execute the second query to get the task status
$row = $conn->query('SELECT @task_status AS task_status')->fetch(PDO::FETCH_ASSOC);
if ($row) {
echo $row !== false ? $row['task_status'] : null;
}
} catch (PDOException $e) {
die($e);
}
Linguagem de código: PHP ( php )
Como funciona.
- Primeiro, execute uma consulta que chame um procedimento armazenado e salve o parâmetro out em uma variável de sessão
@task_status
. - Segundo, execute uma segunda consulta que recupere o valor da
@task_status
variável.
Observe que o script retorna o status da tarefa com id 1.