Saya benar-benar pemula di php dan oke dengan sql. Jadi, mohon maaf atas pengkodean yang berantakan.
Saat ini saya mencoba meneruskan variabel yang berisi nilai '0004', tipe data VARCHAR(4), ke dalam prosedur tersimpan yang saya buat di mysql. Ini kodenya:
<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%>";
?>
Kode berhasil menampilkan nama tamu, ID, nomor invoice yang terhubung dengan guestid yang diminta. Namun, itu tidak memanggil prosedur tersimpan yang saya inginkan. Meskipun jika saya memasukkan '0004' secara manual, bukan $guestid, dalam parameter prosedur, prosedur tersimpan akan berhasil dijalankan dan memberi saya TotalCost yang merupakan hasil yang saya inginkan. Saya tahu tidak ada yang salah dengan prosedur tersimpan saya, tetapi saya akan mempostingnya untuk berjaga-jaga. Bantuan apa pun akan sangat dihargai.
Temukan Biaya Kamar
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
Temukan Biaya Makanan
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
TemukanSpaCost
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