Konfiguráció
Az osztály egy json állományból veszi a csatlakozáshoz szükséges adatokat aminek a következő a felépítése:
{
"host":"a szerver amihez csatlakozni kívánunk",
"db":"az adatbázis neve",
"port":"az port amin keresztül csatlakozunk az adatbázishoz",
"charset":"az adatázis karakterkódolása",
"user":"adatbázis felhasználó",
"pwd":"a csatlakozás jelszava"
}
Az osztály globális változói
private $databaseConfig;
public $dbLink;
Példakód az adatbázis csatlakozásra:
$databaseConfig[0] = json_decode(file_get_contents("path_to_json/DbConfig.json"), true);
include_once("path_to_class" . DbCore.php");
$db = new DbCore($databaseConfig[0]);
Az osztály konstruktora
public function __construct($databaseConfig) {
$this -> databaseConfig = $databaseConfig;
try {
$this->dbLink = new PDO("mysql"':host=' . $this->databaseConfig['host'] .';port=' .$this->databaseConfig['port'] . ';dbname=' . $this->databaseConfig['db'], $this->databaseConfig['user'], $this->databaseConfig['pwd']);
$this->dbLink->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->otherQuery('SET NAMES utf8');
} catch (PDOException $e) {
$this->logWriter($e->errorInfo);
return $e->errorInfo;
}
}
selectQueryBuilder függvény
A select típusú lekérdezések generáló függvénye.
Használata: a $dataArray paraméterben átadott tömb alapján legenerálja a lekérdezést.
A $dataArray tömb felépítése:
- tableName: a tábla neve amire a select lekérdezést alkalmazzuk,
- fields: a lekérdezni kívánt mezők,
- joins: az esetleges más táblákhoz csatlakozások (join-ok) tömbje,
- where: a lekérdezés where feltétele,
- group: a group by mezői,
- having: a having kifejezések értékei,
- order: az order by kifejezések,
- parameters: a lekérdezés paramétertömbje
A függvény a lekérdezés összeállítása után meghívja az osztály parameterSelect tagfüggvényét és visszatérési értékként a lekérdezés eredményét adja egy tömb formájában.
public function selectQueryBuilder($dataArray) {
$dataArray['sql'] = "SELECT " . $dataArray["fields"] . " FROM " . $dataArray["tableName"];
if (isset($dataArray["joins"])) {
for ($i=0; $i<=count($dataArray["joins"])-1; $i++) {
$dataArray['sql'] .= " " . $dataArray["joins"][$i];
}
}
if (isset($dataArray["where"])) {
$dataArray['sql'] .= " WHERE " . $dataArray["where"];
}
if (isset($dataArray["group"])) {
$dataArray['sql'] .= " GROUP BY " . $dataArray["group"];
}
if (isset($dataArray["having"])) {
$dataArray['sql'] .= " HAVING " . $dataArray["having"];
}
if (isset($dataArray["order"])) {
$dataArray['sql'] .= " ORDER BY " . $dataArray["order"];
}
$result = $this->parameterSelect($dataArray); return $result;
}
parameterSelect függvény
Függvény paraméteres select lekérdezések végrehajtására. Használható önálló formában ekkor a $dataArray tömb sql elemében megadott lekérdezést hajtja végre, vagy a selectQueryBuilder függvényből meghívva.
A result tömbben vagy a lekérdezés eredményét vagy pedig a hibákat adja vissza a függvény, ha hiba van akkor az osztály későbbiekben bemutatandó logWriter függvényével kiírhatjuk egy napló file-ba.
public function parameterSelect($dataArray) {
try {
$stmt = $this->dbLink->prepare($dataArray["sql"]);
if (isset($dataArray['parameters'])) {
for ($i=0; $i<=count($dataArray["parameters"])-1; $i++) {
$stmt->bindParam(':' . $dataArray["parameters"][$i]["paramName"], $dataArray["parameters"][$i]["paramVal"], $dataArray["parameters"][$i]["paramType"]);
}
}
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$result['error'] = $e->errorInfo;
$this->logWriter($e->getMessage() . ': ' . $dataArray["sql"]);
}
return $result;
}
parameterInsert függvény
Insert lekérdezések függvénye. Használható közvetlenül meghívva ekkor a $dataArray tömbben sql elemében lehet átadni a lekérdezést vagy az insertQueryBuilder függvényből.
A $dataArray felépítése:
- sql: a lekérdezés
- parameters: a lekérdezés paraméterei
public function parameterInsert($dataArray) {
$result = array();
try {
if (isset($dataArray['parameters'])) {
$stmt = $this->dbLink->prepare($dataArray["sql"]);
for ($i=0; $i<=count($dataArray["parameters"])-1; $i++) {
$stmt->bindParam(':' . $dataArray["parameters"][$i]["paramName"], $dataArray["parameters"][$i]["paramVal"], $dataArray["parameters"][$i]["paramType"]);
}
$stmt->execute(); $result['lastInsert'] = $this->dbLink->lastInsertId();
return $result;
} else {
$result['error'] = "No parameters given for insert.";
$this->logWriter($result['error'] . ': ' . $dataArray['sql']);
return $result;
}
} catch(PDOException $e) {
$result['error'] = $e->errorInfo; $this->logWriter($e->getMessage() . ': ' . $dataArray['sql']);
return $result;
}
}
insertQueryBuilder függvény
Az insert lekérdezéseket generáló függvény.
A dataArray paraméter felépítése:
- tableName: a tábla ahova a beszúrást végezzük,
- fields: a tábla feltöltendő mezői,
Jelenleg egy sort beszúró lekérdezést képes a függvény generálni.
public function insertQueryBuilder($dataArray) {
$dataArray["sql"] = "INSERT INTO " . $dataArray["tableName"] . " SET " . $dataArray["fields"];
$result = $this->parameterInsert($dataArray);
return $result;
}
updateQueryBuilder
Update lekérdezéseket összeállító függvény.
A $dataArray tömb felépítése:
- tableName: a tábla neve amit frissíteni szeretnénk,
- where: a lekérdezés where feltétele,
- having: a lekérdezés having eleme
public function updateQueryBuilder($dataArray) {
$dataArray['sql'] = "UPDATE " . $dataArray["tableName"] . " SET " . $dataArray["fields"];
if (isset($dataArray["where"])) {
$dataArray['sql'] .= " WHERE " . $dataArray['where'];
}
if (isset($dataArray["having"])) {
$dataArray['sql'] .= " HAVING " . $dataArray['having'];
}
$result = $this->parameterUpdate($dataArray);
return $result;
}
parameterUpdate függvény
Az update típusú lekérdezések végrehajtására szolgáló függvény.
A $dataArray tömb felépítése:
- sql: a végrehajtandó lekérdezés,
- parameters: a lekérdezés paraméterei
public function parameterUpdate($dataArray) {
$result = array();
try {
if (isset($dataArray['parameters'])) {
$stmt = $this->dbLink->prepare($dataArray["sql"]);
for ($i=0; $i<=count($dataArray["parameters"])-1; $i++) {
$stmt->bindParam(':' . $dataArray["parameters"][$i]["paramName"], $dataArray["parameters"][$i]["paramVal"], $dataArray["parameters"][$i]["paramType"]);
}
$stmt->execute();
return true;
} else {
$result['error'] = "No parameters given for update.";
$this->logWriter($result['error'] . ': ' . $dataArray['sql']);
return false;
}
} catch(PDOException $e) {
$result['error'] = $e->errorInfo;
$this->logWriter($e->getMessage() . ': ' . $dataArray['sql']);
return false;
}
}
deleteQueryBuilder füügvény
A törlő lekérdezések összeállításáért felelős függvény.
A $dataArray paraméter felépítése:
- tableName: a tábla neve amiből törlünk,
- where: a where felétel ami alapján törlünk
public function deleteQueryBuilder($dataArray) {
$dataArray['sql'] = "DELETE FROM " . $dataArray["tableName"];
if (isset($dataArray["where"])) {
$dataArray['sql'] .= " WHERE " . $dataArray['where'];
}
$result = $this->parameterDelete($dataArray);
return $result;
}
otherQuery függvény
A fent felsoroltakon kívüli lekérdezések végrehajtására szolgáló függvény.
public function otherQuery($sql) {
try {
$this->dbLink->exec($sql);
} catch (PDOException $e) {
$result = array();
$result['error'] = $e->getMessage();
$this->logWriter($e->getMessage() . ': ' . $sql);
return $result;
}
}
beginTran függvény
InnoDB adatbázismotor esetén tranzakciók indítására szolgáló függvény.
public function beginTran() {
$this->dbLink->beginTransaction();
}
rollBack függvény
InnoDB adatbázismotor esetén visszagörgető függvény.
public function rollBack() {
$this->dbLink->rollback();
}
commit függvény
InnoDB adatbázismotor esetén lekérdezések végrehajtására szolgáló függvény.
public function commit() {
$this->dbLink->commit();
}
logWriter függvény
Naplózó függvény.
public function logWriter($message) {
$message = "[" . date("Y-m-d H:i:s") . "]" . $message;
file_put_contents("path_to_logfiles" . date("Ymd") . ".txt", $message);
}
Példakódok
Az adatbázis osztályhoz levő példakódok az alábbi linken érhetőek el: