【问题标题】:session_start Throws Fatal Errorsession_start 引发致命错误
【发布时间】:2011-04-13 08:20:18
【问题描述】:

我目前正在为我的网站开发一个小型 CMS,调用 session_start() 时出现以下错误:

致命错误:在第 0 行的 Unknown 中抛出没有堆栈帧的异常

我将 PDO 数据库连接存储在 $_SESSION 中,因此我需要在启动脚本后直接调用 session_start()。 这是一个 sn-p :

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 行的 Unknown 中抛出没有堆栈帧的异常”,如问题中所述
  • 这听起来不像是会话错误,;这听起来像是在异常处理程序中引发的异常
  • 存储资源(即数据库连接)不起作用,因为它们不可序列化(外部引用也是如此)。
  • 存储连接?通常,只需在下一个请求时重新连接...

标签: php mysql apache session


【解决方案1】:
【解决方案2】:

您不能在会话中存储资源(PDO 对象实际上是资源)。在重新初始化时,它会被破坏并在 PHP 文件的范围“之外”引发异常。

【讨论】:

  • 在会话中存储资源(数据库连接)确实有效。我可以从 $_SESSION 数组中访问对象 (PDO)。我刚刚收到致命错误消息。如果由于序列化而引发它,则会引发有关此事实的错误。但我想我知道你的意思。当再次请求页面(同一会话)时,数据库连接会重新初始化,所以它会抛出错误,对吗?关于以更好的方式存储数据库连接的任何想法?
  • 是的,重新初始化是出错的地方(实际上是在将其写入存储时,但您可能会因为请求“结束”而错过它)。一个通常不存储数据库连接,它们是短暂的,并且不会在第二个请求中存活,然后 fopen ed 资源做
【解决方案3】:

因此,正如我被告知的那样,在会话中保存 PDO 对象确实会引发该错误。我使用了一种解决方法,我现在为每个请求设置 da 连接,而不是在会话中存储连接。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2018-09-07
    • 2013-10-10
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多