Использование переменных PHP SESSION для хранения результатов запросов MySQL

Я хочу выполнить запрос в одном файле, сохранить его в переменной сеанса и получить доступ к результату в другом файле.

File1.php:

//This is the file I have executed my sql statement in //I have already done session_start(); and initialized $conn $query = //my query. I know it is working because I have tested it elsewhere, so I // don't believe it is the problem $_SESSION['query2'] = mysqli_query($conn, $query) 

File2.php:

 //This is the file I want to access my query results in. //I have already done session_start(); and initialized $conn $tempArray = $_SESSION['query2']; if (isset($tempArray)) { $row = mysqli_fetch_array($tempArray, MYSQL_NUM); if ($row == null) { echo "<h1> error </h1>"; //This line gets executed } else { echo "<h1> works! </h1>"; } } else { echo "<h1> array not set </h1>"; } 

Любые идеи относительно того, что я делаю неправильно? Или, есть ли другой способ выполнить то, что я пытаюсь сделать здесь?

Храните фактический массив в сеансе:

 File1.php: $query = //my query. $result = array(); $res = mysqli_query($conn, $query); while($row = mysqli_fetch_array($res, MYSQL_NUM){ $result[] = $row; } $_SESSION['query2'] = $result; File2.php: //I have already done session_start(); and initialized $conn $tempArray = $_SESSION['query2']; var_dump($tempArray); 

У вас есть две проблемы:

  1. Попытка сохранить экземпляр класса так же, как они сказали (помните, что класс должен реализовывать __sleep() и __wakeup() чтобы вы могли выбирать, как сериализовать объект – какие члены вы включите в сериализацию, и как вы будете повторно инициализировать другие участники, когда вы deserialize – также помните, что класс объекта должен быть определен, когда вы unserualiza такой объект).
  2. Попытка хранить, в частности, объект myqsli. Эти объекты содержат ссылки на ресурсы, которые могут быть собраны , поэтому, даже если вы успешно сериализуете такой объект, их внутренние ссылки больше не могут быть действительными.

Ваше конечное решение будет, как говорилось ранее, получать строки и сохранять их в сеансе. Если вы не хотите держать строки (вы сказали, что есть только одна строка, но, возможно, вы не хотите, чтобы они были нужны), сохраните массив с данными, чтобы определить и привязать запрос еще раз.