2010-11-19 8 views
0

테스팅 목적으로 내 사무실에서 localhost 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 파일의 서로 다른 구성 될 수있다 생각하지만 난

+0

"echo $ e-> getMessage();"의 출력은 무엇입니까? 스크립트를 종료하기 전에 스크립트를 한 행 위로 이동해야 할 수도 있습니다. – JochenJung

+0

@JochenJung - 출력이 없습니다. 위로 움직이면 아무것도하지 않습니다. 이 함수는 @ $ db-> rollback(); – JM4

+0

확실한 위로 이동하면 메시지를 줄 수 있습니다. 시도해 봤어? 오류로 인해 try 블록이 실패합니다. $ db beeing이 정의되지 않았다면 (지금 보이는 오류 메시지)이 결과 일뿐입니다. 하지만 이제 $ e-> getMessage()가 표시되지 않고 스크립트가 전에 줄에서 끝나게됩니다. – JochenJung

답변

1

귀하의 코드가 $db->rollback()이 때문에, 실패하고 있음을 나타내는입니다 ... 여전히 php.ini 파일 내 바탕 화면에서 파일 및 행운 복사 $db이 정의되지 않았습니다. 이제 코드의 부분을 보자 :

try 
{ 
    $db = new PDO('mysql:host=localhost;dbname=DB', 'USER', 'PW'); 
    [snip] 
} 

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

나는 예외가 PDO 생성자에서 발생되고, 코드에도 catch 블록에서 첫 번째 문을지나받지 즉 생각합니다. 이를 테스트하려면 $db->rollback()echo $e->getMessage;를 이동하거나 조건부로 롤백을 수행

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

가 더 일반적으로이 문제를 해결하려면 밀접하게 데이터베이스 설정을 확인하십시오 - 아마 한 서버에서 다른 서버로 이동하는 오류가있다?

관련 문제