2010-11-19 33 views
0

我在办公室运行本地主机XAMPP服务器以进行测试。我正在旅行,并决定在笔记本电脑上完成一些工作,所以我在笔记本电脑上安装了新版本的XAMPP,复制了我的文件,但由于某种原因,笔记本电脑版本中出现了不停的错误,在我的桌面上找到一张单曲。在非对象上调用成员函数rollback()

其中一个重要的是我的网站之一的简单登录页面。

每次我试图和运行代码,我收到以下错误时间:

Call to a member function rollback() on a non-object

我的代码是:

<?php 
    session_start(); 

    if($_SERVER['SERVER_PORT'] == 80) { 
     header('Location:https://'.$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]); 
     die(); 
    } 

    try 
    { 
     $db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->beginTransaction(); 

     $sql = $db->prepare("SELECT user, pw FROM table WHERE user=? AND pw=?"); 
     $sql->execute(array($_POST['user'], $_POST['pw'])); 
     $foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn(); 

     $rows = $sql->fetchAll(); 

     foreach($rows as $row) { 
      $username = $row[0]; 
      $pw = $row[1]; 
     } 

     $db->commit(); 
     $db->NULL; 
    } 

    catch (PDOException $e) 
    { 
     $db->rollback(); 
     echo $e->getMessage(); 
     exit; 
    } 


    if ($foundrows == 1) { 

     (store stuff and exit to Page A) 

    } else { 

     (create error and return to login page) 

    } 
?> 

正如我以前说过,这没有问题,运行我的桌面上(和我在其他地方使用的几个活网站)。 H正在发生什么?

注:我想这可能是我的PHP文件的不同配置,但我复制过来从我的桌面php.ini文件,仍然没有运气...

+0

“echo $ e-> getMessage();”的输出是什么?也许你必须在脚本结束之前将它移动一行。 – JochenJung 2010-11-19 11:44:22

+0

@JochenJung - 没有输出,也没有任何动作。该函数正在讨论一个问题@ $ db-> rollback(); – JM4 2010-11-19 18:38:33

+0

当然会动起来,可以给你留言。你有没有尝试过?对于由于错误导致的try块失败。 $ db beeing未定义(您现在看到的错误消息)只是这个结果。但是现在你不会看到$ e-> getMessage(),导致脚本在之前的行中终止。 – JochenJung 2010-11-21 17:55:05

回答

1

您的代码表明$db->rollback()失败,因为$db尚未定义。让我们看看你的代码片段:

我觉得你的代码甚至没有让过去的第一个声明中catch块,即一个例外是在PDO构造被抛出。为了测试这个,上面$db->rollback()移动echo $e->getMessage;,或有条件做回滚:

catch (PDOException $e) 
{ 
    if ($db) { 
     $db->rollback(); 
    } 
    echo $e->getMessage(); 
    exit; 
} 

更广泛地解决这个问题,请仔细检查您的数据库设置 - 也许出现了从一台服务器转移到另一个错误?

相关问题