<?php
namespace app\core;
use PDO;
use PDOStatement;
/**
* Class Db
* @package app\core
*/
class Db
{
/**
* Свойство в котором хранится подключение в базе данных с помощью класса PDO
*
* @var PDO
*/
protected PDO $db;
/**
* Конструктор
*/
public function __construct()
{
$config = require INC_ROOT . '/app/config/db.php';
$this->db = new PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['name'] . '', $config['user'], $config['password'], $config['options']);
}
/**
* Метод выполнения произвольного sql запроса в бд
*
* @param $sql
* @param array $params
* @return bool|PDOStatement
*/
public function query($sql, $params = [])
{
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
$stmt->bindValue(':' . $key, $val);
}
}
$stmt->execute();
return $stmt;
}
/**
* Метод который возвращает записи из бд
*
* @param $sql
* @param array $params
* @return array
*/
public function row($sql, $params = [])
{
$result = $this->query($sql, $params);
return $result->fetchAll(PDO::FETCH_ASSOC);
}
/**
* Метод который возвращает значение одного столбца из бд
*
* @param $sql
* @param array $params
* @return mixed
*/
public function fetch($sql, $params = [])
{
$result = $this->query($sql, $params);
return $result->fetch(PDO::FETCH_ASSOC);
}
/**
* Метод возвращает количество затронутых строк
*
* @param $sql
* @param array $params
* @return mixed
*/
public function count($sql, $params = [])
{
$result = $this->query($sql, $params);
return $result->fetchColumn();
}
}