Próbuję zrobić sobie prostą klasę dziedziczącą po mysqli, która do polecenia "query" będzie przyjmowała tablicę i wykonywała albo ją cała, albo rollback. I tu pojawia się problem. Oto mój kod:
class class_db extends mysqli { var $connected; // czy połączony? var $last_insert_id; // ostatni insert_id (osobno, bo po commit insert_id jest nieokreślony) function __construct($host, $login, $pass, $db) { parent::__construct($host, $login, $pass, $db); parent::query('SET NAMES utf8'); if (mysqli_connect_error()) { $this->connected = false; } else { $this->connected = true; $this->autocommit(false); } } function query($query) { if($this->connected) { { } foreach ($query as $zapytanie) { $wynik = parent::query($zapytanie); if ($this->errno>0) break; } if($this->error != '') { // błąd zapytania $this->rollback(); return false; } $this->last_insert_id=$this->insert_id; // po commit insert id jest nieokreślony, więc trzeba go zapamiętać przed commitem. $this->commit(); return $wynik; } else { // błąd połączenia z bazą return false; } } }
Problem w tym, że jeśli dam kilka zapytań, to rollback nie wykonuje się (mimo, że dochodzi do tego miejsca w kodzie). Przykładowo, przekażę tablicę z 10 delete'ami i w 5 będzie błąd, to 4 pierwsze nie przywrócą się, po prostu są skasowane i tyle.
Gdzie robię błąd?