В этом уроке вы узнаете, как вызвать хранимую процедуру из 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.

