Вызов функции-члена rollback () для необъекта - PullRequest
0 голосов
/ 19 ноября 2010

Я запускаю локальный сервер XAMPP в моем офисе для целей тестирования. Я путешествую и решил, что на моем ноутбуке сделаю некоторую работу, поэтому я установил новую версию XAMPP на свой ноутбук, скопировал свои файлы, но по какой-то причине я получаю безостановочные ошибки на моей версии для ноутбука, где я на моем рабочем столе нет сингла.

Одна из самых больших - это простая страница входа для одного из моих сайтов.

каждый раз, когда я пытаюсь запустить код, я получаю следующую ошибку:

Вызов отката функции-члена () на необъекте

Мой код:

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

    }
?>

Как я уже говорил, это работает без проблем на моем рабочем столе (и на нескольких живых сайтах, которые я использую в другом месте). Что Н происходит?

Примечание: я думал, что это могут быть разные конфигурации моего PHP-файла, но я скопировал файл php.ini со своего рабочего стола, но мне все равно не повезло ...

1 Ответ

1 голос
/ 22 ноября 2010

Ваш код указывает, что $db->rollback() не работает, потому что $db не был определен. Давайте посмотрим на фрагмент вашего кода:

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

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

Я думаю, ваш код даже не проходит первый оператор в блоке catch, т. Е. В конструкторе PDO создается исключение. Чтобы проверить это, переместите echo $e->getMessage; выше $db->rollback() или сделайте откат условно:

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

Чтобы исправить это в более общем плане, внимательно проверьте настройки базы данных - возможно, произошла ошибка при перемещении с одного сервера на другой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...