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