Я не уверен, что это проблема, но вот что выскакивает, когда я читаю ваш код:
Ваш сериализованный объект использует соединение MySQL
$ template = new Template ($ mysqli);
в то время как ваш объект (возможно) может быть сериализован и не сериализован без проблем, соединение mysql не может, поэтому ваш несериализованный $ шаблон пытается работать с недопустимым дескриптором соединения / файла.
Вы можете попробовать повторно присоединить ваш несериализованный объект к действительному соединению базы данных.
Не зная, что находится внутри вашего класса Template (и какие ресурсы он использует и как), трудно догадаться, что не так, но я надеюсь, что это достаточно хорошая подсказка, с чего начать поиск.
Чтобы дать вам лучшее представление о том, о чем я говорю, подумайте:
template.php
<?php
class Template {
function __construct($c) {
$this->conn = $c;
$this->foo = "bar";
}
function get_data() {
$result = mysql_query("select 1234 as test", $this->conn);
$data = mysql_fetch_array($result);
return $data;
}
function attach_db($c) {
$this->conn = $c;
}
}
?>
first.php
<code><?php
session_start();
require('template.php');
$conn = mysql_connect('localhost', 'root', '');
$template = new Template($conn);
?>
<pre>
Your $template var, freshly created:
<?php var_dump($template); ?>
Accessing the resources:
<?php var_dump($template->get_data()); ?>
<?php
$_SESSION['template'] = serialize($template);
?>
other.php
<code><?php
session_start();
require('template.php');
$template = unserialize($_SESSION['template']);
?>
<pre>
Unserialized $template:
<?php var_dump($template); ?>
(notice that $template->foo === "bar" so your session un/serialization is working correctly)
Accessing the (now invalid) mysql resources:
<?php var_dump($template->get_data()); ?>
Если вы позвоните first.php, вы должны получить следующее:
Ваш $ template var, недавно созданный:
объект (шаблон) # 1 (2) {
[ "Подключ"] =>
ресурс (3) типа (ссылка на MySQL)
[ "Foo"] =>
строка (3) "бар"
}
Доступ к ресурсам:
массив (2) {
[0] =>
строка (4) "1234"
[ "Тест"] =>
строка (4) "1234"
}
При вызове others.php должно получиться:
Несериализованный $ шаблон:
объект (шаблон) # 1 (2) {
[ "Подключ"] =>
Int (0)
[ "Foo"] =>
строка (3) "бар"
}
(обратите внимание, что $ template-> foo === "bar", поэтому ваш сеанс un / serialization работает правильно)
Доступ к (теперь недействительным) ресурсам mysql:
Предупреждение: mysql_query (): указанный аргумент не является допустимым ресурсом MySQL-Link в файле template.php в строке 9
Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL в файле template.php в строке 10
bool (false)
Чтобы решить эту проблему, вы можете воссоздать ресурсы, которые нельзя деактивировать / сериализовать.
Как это:
solution.php
<code><?php
session_start();
require('template.php');
$template = unserialize($_SESSION['template']);
?>
<pre>
Unserialized $template:
<?php var_dump($template); ?>
Attaching a valid db connection:
<?php
$conn = mysql_connect('localhost', 'root', '');
$template->attach_db($conn);
var_dump($template);
?>
Accessing the resources:
<?php var_dump($template->get_data()); ?>
Теперь вызов метода solution.php после вызова first.php должен дать вам следующее:
Несериализованный $ шаблон:
объект (шаблон) # 1 (2) {
[ "Подключ"] =>
Int (0)
[ "Foo"] =>
строка (3) "бар"
}
Присоединение действительного соединения БД:
объект (шаблон) # 1 (2) {
[ "Подключ"] =>
ресурс (3) типа (ссылка на MySQL)
[ "Foo"] =>
строка (3) "бар"
}
Доступ к ресурсам:
массив (2) {
[0] =>
строка (4) "1234"
[ "Тест"] =>
строка (4) "1234"
}
Как я уже сказал, не зная, что делает ваш шаблонный класс, невозможно точно сказать, что происходит ... это всего лишь одна возможность;)
Удачи!