prepare('INSERT INTO task_queue (handler, args, options) VALUES (?, ?, ?)'); $result = $stmt->execute([$handler, serialize($args), serialize($options)]); return $result ? $oDB->getInsertID() : 0; } /** * Get the first task. * * @param int $blocking * @return ?object */ public function getTask(int $blocking = 0): ?object { $oDB = RFDB::getInstance(); $oDB->beginTransaction(); $stmt = $oDB->query('SELECT * FROM task_queue ORDER BY id LIMIT 1 FOR UPDATE'); $result = $stmt->fetchObject(); $stmt->closeCursor(); if ($result) { $stmt = $oDB->prepare('DELETE FROM task_queue WHERE id = ?'); $stmt->execute([$result->id]); $oDB->commit(); $result->args = unserialize($result->args); $result->options = unserialize($result->options); return $result; } else { $oDB->commit(); return null; } } }