Не может долго нравиться тот, кто умен всегда на один лад (Ф. Ларошфуко).

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

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
17 июля 2019
PHP MySQL
Описание : в этой статье вы узнаете, как вызывать хранимые процедуры MySQL с помощью PHP PDO. Мы покажем вам, как вызывать хранимые процедуры, которые возвращают набор результатов, и хранимые процедуры, которые принимают параметры ввода/вывода.

 

Вызов хранимых процедур, которые возвращают набор результатов

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

Сначала создайте хранимую процедуру с именем GetCustomers()  в  примере базы данных  для демонстрации. Хранимая процедура GetCustomers() извлекает name и credit limit  клиентов из таблицы customers.

Следующая хранимая процедура GetCustomers() иллюстрирует логику:

DELIMITER $$

CREATE PROCEDURE GetCustomers()
BEGIN
SELECT customerName, creditlimit
FROM customers;
END$$

Во-вторых, создайте новый файл PHP  с именем phpmysqlstoredprocedure1.php и следующим кодом:

<!DOCTYPE html>
<html>
<head>
<title>PHP MySQL. Демонстрация хранимых процедур</title>
<link rel="stylesheet" href="css/table.css" type="text/css" />
</head>
<body>
<?php
require_once 'dbconfig.php';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// выполнение хранимой процедуры
$sql = 'CALL GetCustomers()';
// вызов хранимой процедуры
$q = $pdo->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("Error occurred:" . $e->getMessage());
}
?>
<table>
<tr>
<th>Имя клиента</th>
<th>Кредитный лимит</th>
</tr>
<?php while ($r = $q->fetch()): ?>
<tr>
<td><?php echo $r['customerName'] ?></td>
<td><?php echo '$' . number_format($r['creditlimit'], 2) ?>
</td>
</tr>
<?php endwhile; ?>
</table>
</body>
</html>

Все просто, кроме запроса SQL:

CALL GetCustomers();

Мы отправляем оператор, который вызывает хранимую процедуру GetCustomers() , в MySQL. И мы выполняем инструкцию, чтобы получить набор результатов.

В-третьих, протестируйте скрипт в веб-браузере, чтобы увидеть, как она работает.

 

Вызов хранимых процедур с параметром OUT

Немного сложно вызвать хранимую процедуру с параметром OUT. Мы будем использовать хранимую процедуру GetCustomerLevel(), которая принимает номер клиента в качестве входного параметра и возвращает уровень клиента на основе кредитного лимита.

DELIMITER $$

CREATE PROCEDURE GetCustomerLevel(
in  p_customerNumber int(11),
out p_customerLevel  varchar(10))
BEGIN
DECLARE creditlim double;

SELECT creditlimit INTO creditlim
FROM customers
WHERE customerNumber = p_customerNumber;

IF creditlim > 50000 THEN
SET p_customerLevel = 'PLATINUM';
ELSEIF (creditlim <= 50000 AND creditlim >= 10000) THEN
SET p_customerLevel = 'GOLD';
ELSEIF creditlim < 10000 THEN
SET p_customerLevel = 'SILVER';
END IF;

END$$

В MySQL мы можем вызвать хранимую процедуру GetCustomerLevel() следующим образом:

CALL GetCustomerLevel(103,@level);
SELECT @level AS level;

В PHP мы должны эмулировать эти утверждения:

  • Сначала нам нужно выполнить хранимую процедуру GetCustomerLevel().
  • Во-вторых, чтобы получить уровень клиента, нам нужно запросить его из переменной @level. Важно, что мы должны вызвать метод closeCursor() из объекта PDOStatement для того, чтобы выполнить следующую инструкцию SQL.

Давайте посмотрим, как реализована логика в следующем PHP-скрипте:

<?php

require_once 'dbconfig.php';

/**
* Get customer level
* @param int $customerNumber
* @return string
*/function getCustomerLevel(int $customerNumber) {
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

// вызов команды хранимой процедуры
$sql = 'CALL GetCustomerLevel(:id,@level)';

// подготовка к выполнению хранимой процедуры
$stmt = $pdo->prepare($sql);

// передать значение команды
$stmt->bindParam(':id', $customerNumber, PDO::PARAM_INT);

// выполнение хранимой процедуры
$stmt->execute();

$stmt->closeCursor();

// выполнить второй запрос, чтобы получить уровень заказчика
$row = $pdo->query("SELECT @level AS level")->fetch(PDO::FETCH_ASSOC);
if ($row) {
return $row !== false ? $row['level'] : null;
}
} catch (PDOException $e) {
die("Error occurred:" . $e->getMessage());
}
return null;
}

$customerNo = 103;
echo sprintf('Customer #%d is %s', $customerNo, getCustomerLevel($customerNo));

Если вы протестируете скрипт в веб-браузере, вы увидите следующий скриншот:

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

 

Из этой статьи вы узнали, как вызывать хранимые процедуры MySQL с помощью PHP PDO.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 478

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close