Variabel tidak masuk ke prosedur tersimpan

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

person Adam Loh    schedule 05.02.2015    source sumber


Jawaban (1)


Hapus titiknya.

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

GANTI KE:

$rs = $mysqli->query( 'CALL FindRoomCost('$guestid', @roomCost);');
person technology101010    schedule 05.02.2015
comment
Tidak berhasil. Itu malah memberi saya Kesalahan Parse: Kesalahan Sintaks. - person Adam Loh; 05.02.2015
comment
coba ini. $rs = $mysqli-›query( 'PANGGILAN FindRoomCost('.$guestid.', @roomCost);'); - person technology101010; 06.02.2015
comment
Terselesaikan. Saya baru saja menggunakan $mysqli-›prepare, bind_param dan mengeksekusi untuk Stored Procedures. Terima kasih! - person Adam Loh; 06.02.2015