Пожалуйста, помогите мне.Я пытаюсь вставить записи в 2 таблицы, в 1-ю таблицу я могу вставить, но для второй таблицы я не могу.
У меня есть 3 хранимые процедуры
- HotelInsert
- GetAccommodationByName
- AvailablebiltyInsert
Кажется, что 1-я хранимая процедура в порядке, так как я могу получить вывод в первой таблице, но во второй таблице я не могу получитьпоследний вставленный идентификатор.
Первая хранимая процедура
DELIMITER $$
CREATE DEFINER=`kno`@`localhost` PROCEDURE `HotelInsert`(IN `ZIP` BIGINT, IN `Ammn` VARCHAR(255), IN `HotelName` VARCHAR(255), IN `Add1` VARCHAR(255), IN `Add2` VARCHAR(255), IN `Det` VARCHAR(255), IN `ContactPer` VARCHAR(255), IN `Contact` VARCHAR(255), IN `CEmail` VARCHAR(255), IN `Image` VARCHAR(255), IN `StarCateg` TINYINT)
NO SQL
DETERMINISTIC
INSERT INTO Accommodation(
AccommodationId,
AccommodationTypeId,
ZipId,
PackageId,
Amenities,
Name,
AddressOne,
AddressTwo,
AccommodationStatus,
Details,
ContactPerson,
StarCategory,
ImageGallery,
ContactPhone,
ContactEmail
)
VALUES(
NULL,
1,
ZIP,
4,
Ammn,
HotelName,
Add1,
Add2,
1,
Det,
ContactPer,
StarCateg,
Image,
Contact,
CEmail
)$$
DELIMITER ;
Вторая хранимая процедура:
DELIMITER $$
CREATE DEFINER=`kno`@`localhost` PROCEDURE `GetAccomodationIdByName`(IN `AccommodationName` VARCHAR(255), OUT `AccId` INT)
NO SQL
DETERMINISTIC
SELECT AccommodationId into AccId from Accommodation where Name=AccommodationName$$
DELIMITER ;
Третья хранимая процедура:
DELIMITER $$
CREATE DEFINER=`kno`@`localhost` PROCEDURE `AvailabilityInsert`(IN `AccId` INT, IN `RTypeId` INT, IN `AvailableRooms` INT, IN `Charges` BIGINT, IN `AvailDate` DATE)
NO SQL
INSERT INTO AccommodationAvailabilty (AvailableId, AccommodationId, RoomTypeId, Available, Price, AvailableDate) VALUES (NULL, AccId, RTypeId, AvailableRooms, Charges, AvailDate)$$
DELIMITER ;
PHPкод:
$sql = $db->prepare('CALL HotelInsert(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$sql->bind_param('dssssssssss', $ZipId, $Amenities, $Name, $AddressOne, $AddressTwo, $Details, $ContactPerson, $ContactPhone, $ContactEmail , $target_path, $StarCategory);
$sql->execute();
$select = $db->query('SELECT @ZIP,@Ammn, @HotelName, @Add1, @Add2, @Det, @ContactPer,@Contact,@CEmail,@Image, @StarCateg');
$result = $select->fetch_assoc();
$ZipId = $result['@ZIP'];
$Amenities = $result['@Ammn'];
$AccommodationName = $result['@HotelName'];
$AddressOne = $result['@Add1'];
$AddressTwo = $result['@Add2'];
$Details = $result['@Det'];
$ContactPerson = $result['@ContactPer'];
$ContactPhone = $result['@Contact'];
$ContactEmail = $result['@CEmail'];
$target_path = $result['@Image'];
$StarCategory = $result['@StarCateg'];
//Hotel Calling AccommodationId by AccommodationName with GetAccomodationIdByName(); stored procedure.
$sql = $db->prepare('CALL GetAccomodationIdByName(?)');
$sql->bind_param('s', $AccommodationName);
$sql->execute();
$select = $db->query('SELECT @AccId');
$result = $select->fetch_assoc();
$AccommodationId = $result['@AccId'];
//Hotel Insert RoomType by calling AvailabilityInsert(); Store procedure.
$sql = $db->prepare('CALL AvailabilityInsert(?,?,?,?,?)');
$sql->bind_param('iiids', $AccommodationId, $RoomTypeId, $Available, $Price, $AvailableDate);
$sql->execute();
$select = $db->query('SELECT @AccId,@RTypeId, @AvailableRooms, @Charges, @AvailDate');
$result = $select->fetch_assoc();
$AccommodationId = $result['@AccId'];
$RoomTypeId = $result['@RTypeId'];
$Available = $result['@AvailableRooms'];
$Price = $result['@Charges'];
$AvailableDate = $result['@AvailDate'];
header("Location: ../hotel-all.php?id=$Name");
exit();