什么是$ transaction == BEGIN_TRANSACTION测试?

时间:2013-09-16 00:22:25

标签: php mysql mysqli

我正在尝试通过转换为mysqli来转换一些旧代码。不幸的是我无法弄清楚代码的哪些部分正在尝试,所以我不知道如何更改它。这似乎是一个标准的安全检查,每个人使用原始的mysql扩展使用,但我找不到任何解释原因的人。这是原始代码:

function query($query = "", $transaction = FALSE)
{
    //
    // Remove any pre-existing queries
    //
    unset($this->query_result);

    if( $query != "" )
    {
        $this->num_queries++;
        if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
        {
            $result = mysql_query("BEGIN", $this->db_connect_id);
            if(!$result)
            {
                return false;
            }
            $this->in_transaction = TRUE;
        }

        $this->query_result = mysql_query($query, $this->db_connect_id);
    }
    else
    {
        if( $transaction == END_TRANSACTION && $this->in_transaction )
        {
            $result = mysql_query("COMMIT", $this->db_connect_id);
        }
    }

    if( $this->query_result )
    {
        unset($this->row[$this->query_result]);
        unset($this->rowset[$this->query_result]);

        if( $transaction == END_TRANSACTION && $this->in_transaction )
        {
            $this->in_transaction = FALSE;

            if ( !mysql_query("COMMIT", $this->db_connect_id) )
            {
                mysql_query("ROLLBACK", $this->db_connect_id);
                return false;
            }
        }

        return $this->query_result;
    }
    else
    {
        if( $this->in_transaction )
        {
            mysql_query("ROLLBACK", $this->db_connect_id);
            $this->in_transaction = FALSE;
        }
        return false;
    }
}

我无法弄清楚他们正在做什么

if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

标记BEGIN_TRANSACTIONEND_TRANSACTION是定义的任意常量,以使代码更具可读性。基本上,这整个函数是mysql中的MySQL事务的实现,它不直接支持它们。许多代码只是为了确定事务是否已经启动,以及是否提交,或者将其回滚。

您可以使用mysqli::begin_transaction()mysqli::commit()mysqli::rollback()

来支持相同的功能

PHP引用为here