session_start выдает фатальную ошибку

0

В настоящее время я работаю над небольшой CMS для своего сайта, и при вызове session_start() я получаю следующую ошибку:

Неустранимая ошибка: Исключение выбрано без фрейма стека Неизвестно в строке 0

Я сохраняю соединение базы данных PDO в $_SESSION, поэтому мне нужно вызвать session_start() непосредственно после запуска script. Вот фрагмент:

function initDB($config){ //initalizes the database connection
try{
    @session_start();
}catch (Exception $e){

}
$dsn = 'mysql:dbname='.$config['db'].';host='.$config['host'];
$user = $config['usr'];
$password = $config['pw'];
try {
    $db = new PDO($dsn, $user, $password);
    $_SESSION['db'] = $db;
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Назад прослеживает ошибку до "@session_start()", поэтому я не могу зафиксировать ошибку с @или даже с try-catch.

Надеюсь, ты поможешь мне. Большое спасибо

  • 0
    Какую ошибку вы получаете?
  • 0
    «Фатальная ошибка: исключение, выброшенное без фрейма стека в поле« Неизвестно »в строке 0», как написано в вопросе
Показать ещё 3 комментария
Теги:
session

3 ответа

1
Лучший ответ

Вы не можете хранить ресурсы (объект PDO - фактически ресурс) в сеансе. При повторной инициализации это прерывается и выдает исключение "вне" области вашего PHP файла.

  • 0
    Хранение ресурса (соединение с БД) в сеансе действительно работает. Я могу получить доступ к объекту (PDO) из массива $ _SESSION. Я просто получаю сообщение о фатальной ошибке. Если он будет вызван из-за сериализации, он выдаст ошибку относительно этого факта. Но я думаю, что знаю, что вы имеете в виду. Когда страница запрашивается снова (тот же сеанс), соединение с БД повторно инициализируется, поэтому оно выдает и выдает ошибку, верно? Есть идеи по сохранению соединения с базой данных лучше?
  • 0
    Да, при повторной инициализации происходит ошибка (на самом деле, при записи в хранилище, но вы можете пропустить это, поскольку запрос «закончен»). Один обычно не хранит соединения с базой данных, они недолговечны и не выдерживают второй запрос больше, чем fopen ресурсы.
0

Итак, как мне сказали, сохранение объекта PDO в сеансе вызывает эту ошибку. Я использовал обходной путь, теперь я настраиваю соединение da для каждого запроса вместо хранения соединений в сеансе.

Спасибо за вашу помощь!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню