На сайте имеется система регистрации.Подключение к бд происходит при помощи PDO.Для подключения создан отдельный файл db_connect.php.Его содержимое:
<?php
$servername="localhost";
$user="root";
$password="root";
$dbname="web_forum";
$global_connection=null;
try {
$connect=new PDO("mysql:host=$servername;dbname=$dbname",$user,$password);
$connect->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
setConnection($connect);
}catch (PDOException $e){
$error=$e->getMessage();
echo "<p style='color: red;'>Ошибка соединения с сервером: $error</p>";
}
function setConnection($connection){
global $global_connection;
$global_connection=$connection;
}
function getConnection(){
global $global_connection;
return $global_connection;
}
?>
Обработка формы с email и password пользователя происходит в файле registration_script.php:
<?php
include "Classes/User_class.php";
include "php_scripts/db_connect.php";
session_start();
$email=htmlspecialchars($_POST['email']);
$password=$_POST['password'];
$user=new User($email,$password,getConnection());//getConnection из файла db_connect.php
if ($user->createUserSuccessful()){//функция в классе представлена ниже
$_SESSION['logged']=$user;
header("Location:index.php");
}else{
echo "error";
}
?>
В конструктор класса я передаю объект pdo, полученный из функции getConnection файла db_connect.php.Далее в классе User я использую этот объект pdo для различных запросов.При запуске функции в классе User
public function createUserSuccessful(){
$hash_password=password_hash($this->password,PASSWORD_DEFAULT );
$sql="INSERT INTO users(email,password) VALUES ('$this->email','$hash_password')";
$result=$this->connection->query($sql);
if ($result){
return true;
}else{
return false;
}
}
Я получаю ошибку:
Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDO instances in [no active file]:0 Stack trace: #0 [internal function]: PDO->__sleep() #1 {main} thrown in [no active file] on line 0
В чем проблема? Примечание:
1)Несмотря на ошибку, запрос к БД является успешным, т.е пользователь создается. Однако в сессию объект user не сохраняется
2)При использовании mysqli в файле db_connect.php подобных ошибок не возникает
Я практически уверен, что проблема в хранении в сессии экземпляра PDO.