<?php
|
class Database {
|
private $pdo;
|
private $getByIdStatement;
|
private $getByNumStatement;
|
private $addStatement;
|
|
public function __construct($file) {
|
$this->pdo = new PDO('sqlite:'.$file);
|
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
$this->pdo->query('CREATE TABLE IF NOT EXISTS vehicles (
|
id INT PRIMARY KEY,
|
num INT UNIQUE,
|
weight INT
|
)');
|
|
$this->getByIdStatement = $this->pdo->prepare('SELECT num, weight FROM vehicles WHERE id=? LIMIT 1');
|
$this->getByNumStatement = $this->pdo->prepare('SELECT id, weight FROM vehicles WHERE num=? LIMIT 1');
|
$this->addStatement = $this->pdo->prepare('INSERT OR REPLACE INTO vehicles (id, num, weight) VALUES (?, ?, ?)');
|
}
|
|
public function beginTransaction() {
|
$this->pdo->beginTransaction();
|
}
|
|
public function commit() {
|
$this->pdo->commit();
|
}
|
|
public function rollback() {
|
$this->pdo->rollback();
|
}
|
|
public function getById($id) {
|
$this->getByIdStatement->execute([$id]);
|
return $this->getByIdStatement->fetch();
|
}
|
|
public function getByNum($num) {
|
$st = $this->getByNumStatement->execute([(int)substr($num, 2)]);
|
return $this->getByNumStatement->fetch();
|
}
|
|
public function clear() {
|
$this->pdo->query('DELETE FROM vehicles');
|
}
|
|
public function add($id, $num, $weight) {
|
$this->addStatement->execute([$id, $num, $weight]);
|
}
|
|
public function addMapping($mapping) {
|
$this->beginTransaction();
|
$weight = count($mapping);
|
foreach($mapping as $id => $vehicle) {
|
$this->add($id, (int)substr($vehicle['num'], 2), $weight);
|
}
|
$this->commit();
|
}
|
}
|