PHP齿轮工具与共享数据库连接

时间:2013-08-08 07:57:12

标签: php mysqli gearman

我有一个php工作器,用于从命令行(通过supervisord)运行的gearman,它充当一种“API”。 worker使用mysqli连接从数据库中检索数据并将其发送回连接的客户端。

class My_worker{
    private $worker;
    static $SQL;

public function __construct($SQL){

    $this->worker = new GearmanWorker();
    $this->worker->addServer();
    self::$SQL = $SQL;

//register workers
    $this->worker->addFunction("testA", array($this, 'testA') );
    $this->worker->addFunction("testB", array($this, 'testB') );
   }

public function run(){
    while ($this->worker->work()); 
}

static function testA(){ /* select field1 from DB; fetch row; return serialized; */}
static function testB(){ /* select field2 from DB; fetch row; return serialized; */}

}

//start worker
  $sql = new DB(SQL_HOST, SQL_USER, SQL_PWD, SQL_DB); //  Extends mysqli class
  $worker = new My_worker($sql);
  $worker->run();
}

所以,我有例如两个函数' testA '和' testB ',用于从db执行某些选择。问题是它们共享相同的数据库连接,因此如果同时对两个函数都有请求,可以从“错误”选择中获得结果,即 testB 从select调用得到的结果 testA 而不是 testB

有没有办法避免这种情况,除非在每个函数中打开单独的数据库连接?

1 个答案:

答案 0 :(得分:0)

恕我直言,查询总是并行处理,当前设置不应该有任何问题。 我可以想象通过使用PDO和事务

来改善这一点