Переменная не передается в хранимую процедуру

Я абсолютный новичок в PHP и хорошо с SQL. Итак, извинения за грязное кодирование.

В настоящее время я пытаюсь передать переменную, которая содержит значение ‘0004’, тип данных VARCHAR (4), в хранимую процедуру, которую я создал в MySQL. Вот код:

<html>
<head><title> AmountDue </title><head>
<body>

<h1> Amount Due </h1><?php
$guestid = "0004";
$mysqli = new mysqli('host', 'username', 'pass', 'schemaname');$rs = $mysqli->query( 'CALL FindRoomCost('.$guestid.', @roomCost);');
$rs = $mysqli->query( 'CALL FindFoodCost('.$guestid.', @foodCost);');
$rs = $mysqli->query( 'CALL FindSpaCost('.$guestid.', @spaCost);');
$rs = $mysqli->query( 'SELECT gu.guest_id, bi.invoice_no, gu.first_name,
gu.last_name, @roomCost + @foodCost + @spaCost AS
TotalCost FROM guest gu, bill bi
WHERE gu.guest_id = bi.guest_no
AND gu.guest_id = '.$guestid.';' );

print "<table border=1>";
print "<TR><TH>GuestID</TH><TH>InvoiceNumber</TH><TH>FirstName</TH<TH>LastName</TH><TH>TotalCost</TH></TR>";while ($r2 = mysqli_fetch_row($rs)) {
print "<tr>";
for ($k=0; $k<count($r2); $k++){
print "<td>" . htmlspecialchars($r2[$k]) . "</td>";
}
print "</tr>";
}
print "</table>";
print "<HR width=85%>";
?>

Код успешно отображает имя гостя, идентификатор, номер счета-фактуры, который связан с запрашиваемым гестидом. Однако он не вызывает хранимые процедуры, которые я хочу. Хотя, если я вручную введу ‘0004’ вместо $ guestid в параметрах процедуры, хранимые процедуры будут успешно запущены и выдадут мне TotalCost, который является желаемым результатом. Я знаю, что нет ничего плохого в моих хранимых процедурах, но я просто опубликую это на всякий случай. Любая помощь будет оценена.

FindRoomCost

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `FindRoomCost`
(
IN guestTag VARCHAR(4),
OUT roomCost INT
)
BEGIN

SELECT
(DATEDIFF(res.check_out_date, res.check_in_date))*(count(DISTINCT(ro.room_id)) * (ro.room_rate))
INTO roomCost
FROM room ro, reservation res
WHERE ro.guest_number = res.guest_id
AND ro.guest_number = guestTag;

END

FindFoodCost

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `FindFoodCost`
(
IN guestTag VARCHAR(4),
OUT foodCost INT
)
BEGIN

SELECT CASE
WHEN nrc.invoice_no IN (bi.invoice_no)
THEN SUM(DISTINCT(nrc.quantity * sm.menu_price))
ELSE 0
END
INTO foodCost
FROM bill bi, non_room_charge nrc, set_menu sm
WHERE bi.invoice_no = nrc.invoice_no
AND nrc.menu_no = sm.menu_id
AND bi.guest_no = guestTag;

END

FindSpaCost

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `FindSpaCost`
(
IN guestTag VARCHAR(4),
OUT spaCost INT
)
BEGIN

SELECT CASE
WHEN nrc.invoice_no IN (bi.invoice_no)
THEN SUM(DISTINCT(nrc.quantity * sp.spa_price))
ELSE 0
END
INTO spaCost
FROM bill bi, non_room_charge nrc, spa_package sp
WHERE bi.invoice_no = nrc.invoice_no
AND nrc.spa_no = sp.spa_id
AND bi.guest_no = guestTag;

END

0

Решение

Удалить периоды.

$rs = $mysqli->query( 'CALL FindRoomCost('.$guestid.', @roomCost);');

ИЗМЕНИТЬ В:

$rs = $mysqli->query( 'CALL FindRoomCost('$guestid', @roomCost);');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]