Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Не работает mysqli rollback


Автор: Muerto 5.9.2010, 14:30
Следовал примерам в интернете...

Делаю 
Код

  $this->conn_id-> autocommit(FALSE);
  $this->conn_id-> query("some query");
$this->conn_id->rollback();


Как я себе это представляю, autocommit false, позволяет делать rollback, если бы мы не хотели делать можно было бы сделать
Код

$this->conn_id-> autocommit(FALSE);
  $this->conn_id-> query("some query");
$this->conn_id->commit();


ДОпустим я удаляю все поля с базы данных, делаю rollback, они не возвращаются!

ВОт допустим "рабочий" пример которому я следовал
Код
о
$mysqli=new mysqli("localhost","user_name","password","db_name");

if(mysqli_connect_errno())
{
        echo "Connection failed: ".mysqli_connect_error();
}
else
{
        $mysqli->autocommit(FALSE);
        $mysqli->query("insert into tblbook (id,cid,book) values('','3','book3.1')");
        echo $q_ins=$mysqli->affected_rows."<br>";
        $mysqli->query("update tblbook set book='book3' where cid='3'");
        echo $q_upd=$mysqli->affected_rows."<br>";



        if($q_ins==1 && $q_upd==1)
        {
                $mysqli->commit();
                echo "Commit<br>";
        }
        else
        {
                $mysqli->rollback();
                echo "Rollback<br>";
        }
}




Или в моем варианте:
Код

$db=cload('db_con');
$data=$db->do_query("delete from test");// перед началом выполнения он делает $this->conn_id-> autocommit(FALSE);
$db->rollb();
$data=$db->do_query("select * from test"); //таблица пустая =-(
$db->fetch_result($data);


Автор: Muerto 5.9.2010, 20:30
Никто не пытался пользоваться этой функцией?

Автор: Nigel 6.9.2010, 22:34
Нормально все работает. Включу телепатию: используется движок, который не поддерживает транзакционность?

Автор: Muerto 6.9.2010, 22:39
Nigel, возможно это я и упускаю...
но судя по примеру выше вы видите что autocommit(false) это вроде бы то что нужно
можно почитать тут http://php.net/manual/en/mysqli.autocommit.php

Автор: enoff 7.9.2010, 08:47
Muerto, постом выше подсказка, мануал читали.
Таблицы MyISAM (вероятно, они и используются) не поддерживают транзакции.

Добавлено через 1 минуту и 43 секунды
Посмотрел, об этом написано в мануале в комментариях.

Комментарии на php.net полезно читать smile 

Автор: Muerto 7.9.2010, 09:49
Спасибо, как то вчера на ночь глядя упустил слово движок в посте от Nigel
Таки да, в тестовой таблице используется Myisam кроме него ещё использую innodb но на нем не тестил...

Автор: enoff 7.9.2010, 10:02
Muerto, таблицы InnoDB поддерживают транзакции  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)