PHP MySQL: Chame procedimentos armazenados do MySQL

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 taskstabela:

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_statusvariável.

Observe que o script retorna o status da tarefa com id 1.

Deixe um comentário

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