PHP SQL Server: вызов хранимых процедур

В этом уроке вы узнаете, как вызвать хранимую процедуру из SQL Server с помощью PHP.

Это руководство начинается с того места, где закончилось руководство по выполнению транзакций с использованием PHP.

Создание хранимой процедуры

Шаг 1. Запустите SQL Server Management Studio(SSMS) и подключитесь к базе данных BookStore.

Шаг 2. Выполните следующий оператор, чтобы создать новую хранимую процедуру, которая извлекает авторов по дате рождения между начальной и конечной датами:

CREATE PROCEDURE GetAuthorsByBirthDate
    @StartDate DATE,
    @EndDate DATE
AS
BEGIN
    SET NOCOUNT ON;
    SELECT 
        AuthorID,
        FirstName,
        LastName,
        BirthDate
    FROM 
        Authors
    WHERE 
        BirthDate BETWEEN @StartDate AND @EndDate
    ORDER BY 
        BirthDate;
END;
GO

Вызов хранимой процедуры из PHP

Определите метод findAuthorsByBirthDate в классе AuthorDB для вызова хранимой процедуры GetAuthorsByBirthDate:

function findAuthorsByBirthDate($startDate, $endDate)
{
    $authors = [];
    try {
        $stmt = $this->conn->prepare("EXEC GetAuthorsByBirthDate :startDate, :endDate");
        $stmt->bindParam(':startDate', $startDate);
        $stmt->bindParam(':endDate', $endDate);
        $stmt->execute();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $authors[] = new Author(
                $row['FirstName'],
                $row['LastName'],
                $row['BirthDate'],
                $row['AuthorID']
            );
        }
    } catch(PDOException $e) {
        throw new Exception("Error fetching authors: " . $e->getMessage());
    }
    return $authors;
}

Как это работает.

Шаг 1. Определите публичный метод findAuthorsByBirthDate, который находит авторов с датами рождения между начальной и конечной датами:

function findAuthorsByBirthDate($startDate, $endDate)

Шаг 2. Инициализируем массив для хранения объектов Author, созданных из данных таблицы Authors:

$authors = [];

Шаг 3. Создайте подготовленный оператор, который выполняет вызов хранимой процедуры GetAuthorsByBirthDate.

$stmt = $this->conn->prepare("EXEC GetAuthorsByBirthDate :startDate, :endDate");

:startDate и :endDate — это заполнители для параметров запроса, которые помогают предотвратить SQL-инъекции.

Шаг 4. Свяжите значения для параметров :startDate и :endDate:

$stmt->bindParam(':startDate', $startDate);
$stmt->bindParam(':endDate', $endDate);

Шаг 5. Выполните подготовленный оператор, вызвав метод execute():

$stmt->execute();

Шаг 6. Извлеките строки, создайте автора для каждой строки и добавьте его в массив $authors:

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
   $authors[] = new Author(
                $row['FirstName'],
                $row['LastName'],
                $row['BirthDate'],
                $row['AuthorID']
            );
}

Шаг 7. Верните массив $authors:

return $authors

Запуск приложения

Измените файл index.php, чтобы вызвать метод findAuthorsByBirthDate:

findAuthorsByBirthDate('1980-01-01', '1986-12-31');
foreach($authors as $author) {
    echo $author->getFirstName() . ' ' .
         $author->getLastName() . ' : ' .
         $author->getBirthDate() . '
';
}

Выход:

Donna Bailey : 1980-11-20
Lisa Savage : 1981-04-13
David Hunter : 1983-08-01
Karen Simmons : 1986-06-19

Как это работает.

Сначала загрузите файл authordb.php, чтобы использовать класс AuthorDB.

require_once 'authordb.php';

Во-вторых, подключитесь к SQL Server и назначьте возвращенный объект PDO переменной $conn:

$conn = require_once 'connect.php';

В-третьих, создайте новый объект AuthorDB:

$authorDB = new AuthorDB($conn);

В-четвертых, вызовите метод findAuthorsByBirthDate(), чтобы извлечь авторов, даты рождения которых находятся в диапазоне от «1980-01-01» до «1986-12-31»:

$authors = $authorDB->findAuthorsByBirthDate('1980-01-01', '1986-12-31');

Наконец, отобразите информацию об авторе:

foreach($authors as $author) {
    echo $author->getFirstName() . ' ' .
         $author->getLastName() . ' : ' .
         $author->getBirthDate() . '
';
}

Краткое содержание

  • Выполните оператор EXEC для вызова хранимой процедуры из SQL Server в PHP.
Мирослав С.

Автор статей, ИБ-специалист