1
0
This repository has been archived on 2025-03-31. You can view files and clone it, but cannot push or open issues or pull requests.

87 lines
2.1 KiB
PHP

<?php
namespace OwntracksRecorder\Database;
use \OwntracksRecorder\Database\AbstractDatabase;
class MySql extends AbstractDatabase
{
public function __construct(string $db, string $hostname = null, string $username = null, string $password = null, string $prefix = '')
{
$this->db = new \mysqli($hostname, $username, $password, $db);
$this->prefix = $prefix;
}
private function prepareStmt(string $sql, array $params)
{
$stmt = $this->db->prepare($sql);
if (!$stmt) {
return false;
}
$typestr = '';
foreach ($params as $p) {
$type = gettype($p);
switch ($type) {
case 'integer':
$typestr .= 'i';
break;
case 'double':
case 'float':
$typestr .= 'd';
break;
default:
case 'string':
$typestr .= 's';
break;
}
}
// Splat operator needs PHP 5.6+
$stmt->bind_param($typestr, ...$params);
return $stmt;
}
protected function query(string $sql, array $params = array()): array
{
$stmt = $this->prepareStmt($sql, $params);
if (!$stmt) {
return false;
}
if (!$stmt->execute()) {
return false;
}
$dbresult = $stmt->get_result();
$result = array();
while ($data = $dbresult->fetch_assoc()) {
// Loop through results here $data[]
$result[] = $data;
}
$stmt->close();
return $result;
}
protected function execute(string $sql, array $params = array()): bool
{
$stmt = $this->prepareStmt($sql, $params);
if (!$stmt) {
return false;
}
$result = $stmt->execute();
if ($result) {
$stmt->close();
}
return $result;
}
public function beginTransaction()
{
$this->db->begin_transaction();
}
public function commitTransaction()
{
$this->db->commit();
}
}