我想在不同的浏览器选项卡中运行同一脚本的多个脚本实例。我希望他们有不同的 MySQL 连接。每个都有其独特的联系。
我知道它mysql_connect
有第四个参数$new_link
应该打开一个新链接,但即使这样通常也不会打开一个新连接。有时确实如此。
我在 Widows 机器上安装了 XAMPP。
问题是:我如何绝对强制 PHP/MySQL 为脚本的每个实例打开一个新连接?脚本运行大约 2 分钟。
http://localhost/myscript.php
以下是 MySQL 代码的摘录。首先从数据库加载一个工作分配并将其标记为进行中:
public function loadRange() {
try{
$this->db()->query('START TRANSACTION');
$this->row = $this->db()->getObject("
SELECT * FROM {$this->tableRanges}
WHERE
status = " . self::STATUS_READY_FOR_WORK . "
AND domain_id = {$this->domainId}
ORDER BY sort ASC
LIMIT 1");
if(!$this->row) throw new Exception('Could not load range');
$this->db()->update($this->tableRanges, $this->row->id, array(
'thread_id' => $this->id,
'status' => self::STATUS_WORKING,
'run_name' => $this->runName,
'time_started' => time(),
));
$this->db()->query('COMMIT');
} catch(Exception $e) {
$this->db()->query('ROLLBACK');
throw new Exception($e->getMessage());
}
}
然后脚本可能会也可能不会根据它找到的内容在另一个表中插入行。
最后,当任务完成时,分配行再次更新:
$this->db()->update($this->tableRanges, $this->row->id, array(
'status' => self::STATUS_EXECUTED,
'time_finished' => time(),
'count' => $count,
));
特别是,该$this->tableRanges
表看起来已被锁定。知道为什么会这样吗?它是一个 InnoDB 表。