2010-11-19 73 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; 
} 

更廣泛地解決這個問題,請仔細檢查您的數據庫設置 - 也許出現了從一臺服務器轉移到另一個錯誤?

相關問題