<?php
/**
* PdoMysqlLogger file
*
* Copyright (c) 2016, Kiril Savchev
* All rights reserved.
*
* @category Libs
* @package Logger
*
* @author Kiril Savchev <k.savchev@gmail.com>
*
* @license https://opensource.org/licenses/BSD-3-Clause BSD 3 License
* @link http://ifthenelse.info
*/
namespace Ite\Logger;
/**
* Basic PDO logger
*
* Simple logging log information to the database using the native \PDO lib
*
* @version 1.1
*
* @author Kiril Savchev <k.savchev@gmail.com>
*/
class PdoMysqlLogger extends AbstractDatabaseLogger {
/**
* The PDO object that will writes to the database
*
* @var \PDO
*/
protected $pdo;
/**
* Configuration for database connection
*
* @var array
*/
protected $dbConfig;
/**
* Database logger using \PDO to writes the log information
*
* @param array $dbConfig Database configs (database name, host, etc...)
* @param array|string $config [Optional] Table configs or default table name
* @param string $defaultTable [Optional] The default log table name
* @param \PDO $pdo [Optional] \PDO object to use
* @throws Exception\InvalidArgumentException
*/
public function __construct(array $dbConfig = [], $config = null, $defaultTable = '', \PDO $pdo = null) {
parent::__construct($config, $defaultTable);
if ($dbConfig) {
$this->prepareDbConfig($dbConfig);
}
if ($pdo) {
$this->pdo = $pdo;
}
}
/**
* Prepares the database configuration
* @param array $dbConfig The database connection configs
* @throws Exception\InvalidArgumentException
*/
protected function prepareDbConfig(array $dbConfig) {
if (!array_key_exists('name', $dbConfig)) {
throw new Exception\InvalidArgumentException("No database name");
}
if (!array_key_exists('host', $dbConfig)) {
throw new Exception\InvalidArgumentException("No database host");
}
if (!array_key_exists('username', $dbConfig)) {
$dbConfig['username'] = null;
}
if (!array_key_exists('password', $dbConfig)) {
$dbConfig['password'] = null;
}
if (!array_key_exists('options', $dbConfig) || !is_array($dbConfig['options'])) {
$dbConfig['options'] = [];
}
$this->dbConfig = $dbConfig;
}
/**
* Creates the PDO object
*/
protected function createPdo() {
$dbConfig = $this->dbConfig;
$this->pdo = new \PDO('mysql:dbname='.$dbConfig['name'].';host='.$dbConfig['host'], $dbConfig['username'], $dbConfig['password'], $dbConfig['options']);
}
/**
* Writes the prepared sql to the database
*
* @param string $sql The SQL query for inserting the log
* @param array $params [Optional] Query parameters for the statement
* @param bool $mustPrepare [Optional] Whether or not to prepare the statement
*/
protected function write($sql, array $params = [], $mustPrepare = false) {
if (!$this->pdo) {
$this->createPdo();
}
if (!$mustPrepare) {
$this->pdo->query($sql);
}
else {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
}
}
/**
* Return the PDO object
*
* @return \PDO
*/
public function getPdo() {
return $this->pdo;
}
/**
* Return the database configuration
*
* @return array
*/
public function getDbConfig() {
return $this->dbConfig;
}
/**
* Sets the PDO object
* @param \PDO $pdo
* @return \Ite\Logger\PdoMysqlLogger
*/
public function setPdo(\PDO $pdo) {
$this->pdo = $pdo;
return $this;
}
/**
* Sets database configuration
*
* @param array $dbConfig
* @return \Ite\Logger\PdoMysqlLogger
*/
public function setDbConfig(array $dbConfig) {
$this->prepareDbConfig($dbConfig);
return $this;
}
}
|