Есть ли способ вызвать хранимую процедуру mySQL из PHP при передаче переменной $ _SESSION в качестве ее параметра? - PullRequest
0 голосов
/ 03 мая 2020

Что я пытаюсь сделать:

  • Мне нужно вызвать хранимую процедуру в 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 ;

Создание таблицы Метод работает при использовании оператора выбора , однако, когда я пытаюсь открыть эту страницу с помощью хранимой процедуры, ничего не отображается. Вся страница пуста. Обратите внимание, что безопасность не имеет значения.

1 Ответ

0 голосов
/ 03 мая 2020

Проблема в том, как вы строите свой запрос, вы смешиваете стили построения строк. И вам не хватает кавычек для параметра

Стиль старой школы:

$sql = 'CALL getStudentDevices("' . $_SESSION["studentID"] . '")';

Передача переменной:

$sql = "CALL getStudentDevices(\"{$_SESSION["studentID"]}\")";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...