Я пытаюсь использовать PHP для чтения двух наборов результатов из хранимой процедуры.Первый набор результатов в порядке, но, хотя второй, кажется, существует, я не могу заставить php обработать его.Вместо этого при попытке связывания происходит сбой со старым каштаном
"Предупреждение PHP: mysqli_stmt_bind_result
(): число переменных связывания не соответствует числу полей в подготовленном выражении".
public function GetSession($sessionId) {
$conn = mysqli_connect(DbConstants::$servername, DbConstants::$username, DbConstants::$password, DbConstants::$dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$call = mysqli_prepare($conn, 'CALL Sp_Session_GetById(?)');
mysqli_stmt_bind_param($call, 'i', $sessionId);
mysqli_stmt_execute($call);
mysqli_stmt_bind_result(
$call,
$id,
$startTime,
$duration,
$description,
$instructorId,
$aircraftId,
$display,
$bookable,
$cancelled
);
mysqli_stmt_fetch($call);
$session = new Session($id, $startTime, $duration, $description, $instructorId, $aircraftId, $display, $bookable, $cancelled, []);
if(mysqli_stmt_more_results($call)) { /* This is true */
mysqli_stmt_next_result($call);
/* This is where it goes wrong */
mysqli_stmt_bind_result(
$call,
$sessionTypeId,
$spaces,
$enabled
);
}
}
Если я выполню хранимую процедуру в MySQL Workbench, я получу две вкладки результатов, которые выглядят следующим образом:
# id, startTime, duration, description, instructor_id, aircraft_id, display, bookable, cancelled
'38', '2018-05-19 09:00:00', '180', NULL, '18', '2', '1', '1', '0'
# sessiontype_id, spaces, enabled
'1', '3', '1'
'2', '3', '1'
Хранимая процедура была создана следующим образом:
DELIMITER //
CREATE PROCEDURE Sp_Session_GetById (IN
_id int
)
BEGIN
SELECT
s.id,
s.startTime,
s.duration,
s.description,
s.instructor_id,
s.aircraft_id,
s.display,
s.bookable,
s.cancelled
FROM session s
WHERE s.id = _id
AND s.cancelled = false
AND s.display = true;
SELECT sst.sessiontype_id, sst.spaces, sst.enabled
FROM session_sessiontype as sst
WHERE sst.session_id = _id;
END //
DELIMITER ;