Давайте рассмотрим, что у нас есть два отдельных класса, каждый из которых имеет объект mysqli
для использования в операциях с базой данных.Обработка транзакций PHP с несколькими объектами mysqli
class A{
protected $mysqliObject;
public function __constructor(){
$this->mysqliObject=new mysqli(...)
}
public function doSomething(){
$this->mysqliObject->query(...);
}
}
class B{
protected $mysqliObject;
public function __constructor(){
$this->mysqliObject=new mysqli(...)
}
public function doSomething(){
$this->mysqliObject->query(...);
}
}
В doSomething()
методы используют $mysqliObject
для запроса к базе данных (SELECT, UPDATE, DELETE, и т.д ...). Я хочу сделать следующее снаружи:
// Start point
$aObject=new A();
$bObject=new B();
$aObject->doSomething();
$bObject->doSomething();
// End point
... но я хочу откатить оба запроса, если какой-либо из них не сработает. Как я могу это сделать?
- Могу ли я создать новый
mysqli
объект в «Начальная точка», и использовать его для фиксации или отката на «Конечная точка» базы данных запросаclass A
иclass B
? - Должен ли я создать снаружи и передать те же
$mysqliObject
в__constructor()
изclass A
иclass B
и использовать их для откат или фиксации (снаружи).
Хотелось бы увидеть больше приемов с проконсонами.
В основном, мой вопрос состоял в том, чтобы спросить/настроить другой подход, чем это. Возможно, я просто хотел немного обмануть и выбросить ООП из окна. Я продолжу, как вы упомянули. – Dyin
Удачи вам в этом. Это может работать в воображаемых программах, но на практике вы столкнетесь с [командами не синхронизированы] (http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html) , В этом вопросе четко указано использование mysqli. – doug65536