2010-11-19 5 views
0

Je lance un serveur XAMPP localhost à mon bureau à des fins de test. Je voyage et j'ai décidé de faire un peu de travail sur mon ordinateur portable alors j'ai installé une nouvelle version de XAMPP sur mon ordinateur portable, copié mes fichiers mais pour une raison quelconque, je reçois des erreurs non-stop sur ma version portable. t obtenir un seul sur mon bureau.Appel à une fonction membre rollback() sur un non-objet

L'une des plus importantes est une simple page de connexion pour l'un de mes sites.

chaque fois que je et exécuter le code, je reçois l'erreur suivante:

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

Mon code est:

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

    } 
?> 

Comme je l'ai dit avant, cela va sans problème sur mon bureau (et plusieurs sites en direct que j'utilise ailleurs). Qu'est-ce que le H se passe?

Note: Je pensais que ce peut être différentes configurations de mon fichier PHP, mais je copié le fichier php.ini de mon bureau et toujours pas de chance ...

+0

Quelle est la sortie de "echo $ e-> getMessage();"? Peut-être que vous devez le déplacer d'une ligne vers le haut l'obtenir, avant que le script se termine. – JochenJung

+0

@JochenJung - il n'y a pas de sortie, aussi, en remontant ne ferait rien. la fonction provoque un problème @ $ db-> rollback(); – JM4

+0

Sure en remontant, pourrait vous donner un autre message. As-tu essayé? Pour les échecs du bloc try en raison de votre erreur. $ db n'est pas défini (le message d'erreur que vous voyez maintenant) n'est que le résultat de ceci. Mais maintenant, vous ne verrez pas le $ e-> getMessage(), car le script se termine dans la ligne précédente. – JochenJung

Répondre

1

Votre code indiquant que $db->rollback() est un échec, parce que $db n'a pas été défini. Jetons un coup d'œil à un extrait de votre code:

Je pense que votre code est même pas passé devient la première déclaration dans le bloc catch, à savoir une exception est levée dans le constructeur PDO. Pour tester cela, déplacer echo $e->getMessage; ci-dessus $db->rollback(), ou faire le rollback conditionnel:

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

Pour résoudre ce problème de façon plus générale, s'il vous plaît vérifier vos paramètres de base de données de près - peut-être il y a eu une erreur passer d'un serveur à un autre?

Questions connexes