Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对非对象调用成员函数rollback()_Php_Mysql_Pdo - Fatal编程技术网

Php 对非对象调用成员函数rollback()

Php 对非对象调用成员函数rollback(),php,mysql,pdo,Php,Mysql,Pdo,出于测试目的,我在办公室运行localhost XAMPP服务器。我正在旅行,决定在我的笔记本电脑上完成一些工作,所以我在笔记本电脑上安装了一个新版本的XAMPP,复制了我的文件,但由于某种原因,我的笔记本电脑版本出现了不间断的错误,而我的桌面上没有一个 其中一个大问题是我的一个站点的简单登录页面 每次尝试运行代码时,都会出现以下错误: 对成员函数rollback()的调用 关于非对象 我的代码是: <?php session_start(); if( $_SERVER[

出于测试目的,我在办公室运行localhost XAMPP服务器。我正在旅行,决定在我的笔记本电脑上完成一些工作,所以我在笔记本电脑上安装了一个新版本的XAMPP,复制了我的文件,但由于某种原因,我的笔记本电脑版本出现了不间断的错误,而我的桌面上没有一个

其中一个大问题是我的一个站点的简单登录页面

每次尝试运行代码时,都会出现以下错误:

对成员函数rollback()的调用 关于非对象

我的代码是:

<?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文件,仍然没有成功…

您的代码表明
$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;
}

为了更全面地解决这个问题,请仔细检查您的数据库设置——也许在从一台服务器移动到另一台服务器时发生了错误?

echo$e->getMessage();”的输出是什么?在脚本终止之前,也许你必须将它向上移动一行以获取它。@JochenJung-没有输出,而且,向上移动也没有任何作用。函数正在处理一个问题@$db->rollback();当然向上移动,可能会给你其他信息。你试过了吗?由于您的错误,尝试块失败$db beeing not defined(您现在看到的错误消息)就是这种情况的结果。但是现在您将看不到$e->getMessage(),因为脚本在前面的行中终止。