Что я пытаюсь сделать:
- Мне нужно вызвать хранимую процедуру в PHP, getStudentDevices () , хранящуюся на mySQL сервере.
- Требуется один параметр: @p0.
- Я хочу указать этот параметр, используя переменную $ _SESSION, studentID .
Что работает:
- Я могу вызвать хранимую процедуру из phpMyAdmin, и она выдаст правильный результат. Так что это не проблема с процедурой.
- Я могу запросить базу данных из PHP, используя другой оператор выбора, и я получаю результаты, отображаемые так, как я хочу, поэтому я не Не думаю, что есть проблема с подключением к БД из PHP.
То, что я пробовал:
Это PHP, используемый для извлечения результатов и отображения их в таблице, используя тот же метод, который упоминался ранее: я пытался использовать {} для передачи переменной $ _SESSION.
<?php
$sql = "CALL getStudentDevices(.$_SESSION["studentID"].)";
$result = mysqli_query($conn, $sql); // $conn details omitted
// If selection is not empty
// Create table row for each record selected
if ($result->num_rows > 0) {
echo "<table> <tr> <th>DeviceID</th> <th>DeviceName</th> </tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr> <td>".$row["DeviceID"]."</td> <td>".$row["DeviceName"]."</td> </tr>";
}
echo "</table>";
} else {
// If select is empty then
echo "0 results";
}
$conn->close();
?>
Вот хранимая процедура (которая отлично работает при вызове из СУБД):
DELIMITER $$
CREATE DEFINER=`username`@`hostname` PROCEDURE `getStudentDevices`(IN `StudentID` VARCHAR(11))
READS SQL DATA
SELECT Devices.DeviceID, Devices.DeviceName FROM Accounts
LEFT JOIN Courses ON Accounts.CourseID = Courses.CourseID
LEFT JOIN Course_Category cc ON Courses.CourseID = cc.CourseID
LEFT JOIN Categories ON cc.Category = Categories.Category
LEFT JOIN Devices ON Categories.Category = Devices.Category
WHERE Accounts.StudentID = @p0 AND Devices.Available = 1$$
DELIMITER ;
Создание таблицы Метод работает при использовании оператора выбора , однако, когда я пытаюсь открыть эту страницу с помощью хранимой процедуры, ничего не отображается. Вся страница пуста. Обратите внимание, что безопасность не имеет значения.