2010-11-19 7 views
0

テスト目的でオフィスにlocalhost XAMPPサーバを実行します。私は旅行していると私はラップトップでいくつかの仕事をするだろうと決めたので、私はラップトップにXAMPPの新しいバージョンをインストールし、私のファイルをコピーして何かの理由で、私のデスクトップ上で1つを得る。非オブジェクトのrollback()メンバ関数への呼び出し

大きなものの1つは、自分のサイトの1つの単純なログインページです。

私がしようとすると、コードを実行するたびに、私は次のエラーを取得する:

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();」の出力は何ですか?スクリプトを終了する前に、スクリプトを1行上に移動する必要があるかもしれません。 – JochenJung

+0

@JochenJung - 出力はありません。また、上に移動すると何もしません。この関数は@ $ db-> rollback()という問題を解決しています。 – JM4

+0

確かに上がって、あなたに別のメッセージを与えることができます。やってみました?あなたのエラーのためにtryブロックが失敗します。 $ db beeingは定義されていません(今見ているエラーメッセージ)。しかし今では、$ e-> getMessage()が表示されず、前の行でスクリプトが終了します。 – JochenJung

答えて

1

あなたのコードは$db->rollback()が失敗していることを示している、なぜなら$dbは定義されていません。のは、あなたのコードのスニペットを見てみましょう:

私はあなたのコードでも例外ではPDOコンストラクタでスローされている、すなわち、catchブロックの最初のステートメントを過ぎて取得されていないと思います。これをテストするには、$db->rollback()echo $e->getMessage;を移動したり、条件付きでロールバックを実行します。

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

は、より一般的にこの問題を解決するには、密接にデータベースの設定を確認してください - おそらく、あるサーバーから別のサーバーに移動する誤りがありましたか?

関連する問題