phantom
до чего же ты ленивый... или не хочешь понять что тебе говорят
Код: Выделить всё
//
// Base query method
//
function sql_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( $query != "" )
..
else
{
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
$result = mysql_query("COMMIT", $this->db_connect_id);
}
}
и если нету, то проверяем пытаемся ли выполнить END_TRANSACTION, он выполняется,
ТОЛЬКО если был выполнен BEGIN_TRANSACTION...
следующим этапом идет проверка выполнился ли запрос, но именно запрос, а не COMMIT!
Код: Выделить всё
if( $this->query_result )
...
else
{
if( $this->in_transaction )
{
mysql_query("ROLLBACK", $this->db_connect_id);
$this->in_transaction = FALSE;
}
return false;
}
и если он не выполнился, то мы проверяем, выполнился ли COMMIT, проверка идет путем проверки завершили ли мы BEGIN_TRANSACTION или нет... и если нет, то выполняется ROLLBACK, в ином случае данное место игнорируется... единственное, что тут можно исправить так это
заменить на
а ты же своей заменой предпоследнюю проверку
Код: Выделить всё
if( $this->query_result )
{
...
}
else
{
... ROLLBACK ...
}
заставляешь выполнится как для запроса... в итоге ты получаешь данный код...
Код: Выделить всё
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;
}
}
а это приводит к тому, что ты пытаешься выполнить второй COMMIT, но я не уверен, что он выполнится, и следовательно выполняется ROLLBACK...