Вызов процедуры mysql из php с параметром in и out - PullRequest
0 голосов
/ 20 сентября 2018

Пожалуйста, помогите мне.Я пытаюсь вставить записи в 2 таблицы, в 1-ю таблицу я могу вставить, но для второй таблицы я не могу.

У меня есть 3 хранимые процедуры

  1. HotelInsert
  2. GetAccommodationByName
  3. 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...