-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPDODatabaseRecords.php
More file actions
78 lines (69 loc) · 2.37 KB
/
PDODatabaseRecords.php
File metadata and controls
78 lines (69 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
/*
* Copyright (c) 2021.
* Marc Concepcion
* marcanthonyconcepcion@gmail.com
*/
$configuration = yaml_parse_file(__DIR__.'\resources\MarcPHPRESTAPIDemo.yaml');
define('Database_HOST', $configuration['database']['host']);
define('Database_DBNAME', $configuration['database']['dbname']);
define('Database_USER', $configuration['database']['user']);
define('Database_PASSWORD', $configuration['database']['password']);
const Database_CHARSET = 'utf8';
require_once 'DatabaseRecords.php';
class PDODatabaseRecords implements DatabaseRecords
{
private PDO $database;
function __construct()
{
try
{
$this->database = new PDO('mysql:host='.Database_HOST.';dbname='.Database_DBNAME.';charset='.Database_CHARSET,
Database_USER, Database_PASSWORD, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false ]);
}
catch (PDOException $error)
{
throw new ConnectDatabaseError($error->getMessage(), $error->getCode());
}
}
function fetch(string $query, array $parameters=[]): Generator
{
$statement = $this->database->prepare($query);
try
{
$statement->execute($parameters);
while($row = $statement->fetch())
yield $row;
}
catch (PDOException $error)
{
throw new RunDatabaseQueryError($error->getMessage(), $error->getCode());
}
finally
{
$statement->closeCursor();
}
}
function edit(string $query, array $parameters=[])
{
try
{
$this->database->prepare($query)->execute($parameters);
}
catch (PDOException $error)
{
throw new RunDatabaseQueryError($error->getMessage(), $error->getCode());
}
}
private static ?PDODatabaseRecords $singleton = null;
static function get(): PDODatabaseRecords
{
if (null === PDODatabaseRecords::$singleton)
PDODatabaseRecords::$singleton = new self;
return PDODatabaseRecords::$singleton;
}
}
class RunDatabaseQueryError extends Exception { }
class ConnectDatabaseError extends Exception { }