2010-11-19 28 views
0

Test amacıyla bir localhost XAMPP sunucusunu ofisimde çalıştırıyorum. Seyahat ediyorum ve dizüstü bilgisayarımda bir iş yapmam gerektiğine karar verdim, böylece dizüstü bilgisayarımda XAMPP'nin yeni bir sürümünü yükledim, dosyalarımı kopyaladım ama bir nedenden ötürü, dizüstü bilgisayarımın üzerinde durmadığım hatalar oluyor. Masaüstümde bir tane olsun.Nesne olmayan bir öğe rollback() işlevini çağırın

Büyük sitelerden biri, sitelerimden biri için basit bir giriş sayfasıdır.

her zaman aşağıdaki hatayı alıyorum, denemek ve kod çalıştırmasına

:

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

Benim kodudur:

<?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) 

    } 
?> 

Dediğim gibi, bu benim masaüstünde sorun olmadan çalışır (ve başka yerlerde kullandığım birçok canlı site). H ne oluyor?

Not: bu benim PHP dosyanın farklı yapılandırmalar olabilir ama doğru

+0

"echo $ e-> getMessage();" ifadesinin çıktısı nedir? Belki de senaryo bittikten önce, bir satır yukarı almanız gerekir. – JochenJung

+0

@JochenJung - çıktı yok, aynı zamanda, hiçbir şey yapmaz. işlev bir sorun @ $ db-> rollback(); – JM4

+0

Harekete geçme, size daha fazla mesaj verebilirim. Denedin mi? Hatanız nedeniyle deneme bloğu hataları için. $ db beeing tanımlı değil (şimdi gördüğünüz hata mesajı) bunun bir sonucudur. Ama şimdi $ e-> getMessage() 'ı görmeyeceksiniz, çünkü betik daha önce satırda bitiyor. – JochenJung

cevap

1

Kodunuz $db->rollback() çünkü başarısız olduğunu belirten bir ... hala php.ini benim masaüstünden dosya ve hiçbir şans üzerinde kopyalanan $db tanımlanmadı. senin bir kod parçalarını bir göz atalım:

ben bir istisna PDO yapıcı atılan ediliyor, kodunuz bile catch bloktaki ilk açıklamada geçmiş almıyor yani düşünüyorum. Bunu test etmek için $db->rollback() yukarıdaki echo $e->getMessage; taşıyabilir veya şartlı geri alma yapın:

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

daha genel Bunu düzeltmek için, yakından veritabanı ayarlarını kontrol edin - belki başka bir sunucudan taşınırken bir hata olmuştur?

İlgili konular