first commit
This commit is contained in:
+212
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
require_once _DOCROOT_.'vendor/autoload.php';
|
||||
|
||||
use Monolog\Logger;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Handler\FirePHPHandler;
|
||||
|
||||
$dotenv = new Dotenv\Dotenv(_DOCROOT_);
|
||||
$dotenv->load();
|
||||
|
||||
class db {
|
||||
|
||||
protected $connection;
|
||||
protected $stmt;
|
||||
public $insertid;
|
||||
public $num_rows;
|
||||
public $result_metadata;
|
||||
public $result_fetch;
|
||||
public $fetch_field;
|
||||
public $query_count = 0;
|
||||
public $debugging = FALSE;
|
||||
public $error;
|
||||
|
||||
public function __construct($dbhost = '', $dbuser = '', $dbpass = '', $dbname = '', $charset = 'utf8') {
|
||||
if($dbhost == '' || $dbuser == '' || $dbpass == '' || $dbname == '')
|
||||
{
|
||||
$dbhost = 'p:'.$_ENV['DATABASE_HOST'];
|
||||
$dbuser = $_ENV['DATABASE_USER'];
|
||||
$dbpass = $_ENV['DATABASE_PASS'];
|
||||
$dbname = $_ENV['DATABASE_NAME'];
|
||||
}
|
||||
$this->connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
|
||||
if ($this->connection->connect_error) {
|
||||
$this->debug('Failed to connect to MySQL - ' . $this->connection->connect_error);
|
||||
}
|
||||
$this->connection->set_charset($charset);
|
||||
}
|
||||
|
||||
private function makeDir($new_path, $mode) {
|
||||
return is_dir($new_path) || mkdir($new_path, $mode, true);
|
||||
}
|
||||
|
||||
public function debug($args,$type = 'debug') {
|
||||
global $logdir;
|
||||
// create a log channel
|
||||
$logger = new Logger('query');
|
||||
$daily_log = date('d-m-Y').'.log';
|
||||
|
||||
|
||||
$year_dir = self::makeDir($logdir.'activity/'.date('Y'),0777);
|
||||
$month_dir = self::makeDir($logdir.'activity/'.date('Y').'/'.date('m'),0777);
|
||||
|
||||
$dir_log = $logdir.'activity/'.date('Y').'/'.date('m').'/'.$daily_log;
|
||||
$logger->pushHandler(new StreamHandler($dir_log, Logger::DEBUG));
|
||||
|
||||
$uri = $_SERVER['REQUEST_URI'];
|
||||
|
||||
$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
|
||||
|
||||
$url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
|
||||
$query = $_SERVER['QUERY_STRING'];
|
||||
|
||||
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
||||
$ip=$_SERVER['HTTP_CLIENT_IP']; // share internet
|
||||
} elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
$ip=$_SERVER['HTTP_X_FORWARDED_FOR']; // pass from proxy
|
||||
} else {
|
||||
$ip=$_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
if($type == 'debug'){
|
||||
$logger->addDebug($args,[$_SESSION['NAMA_PEGAWAI'],$url,$query,$ip]);
|
||||
}
|
||||
elseif($type == 'info'){
|
||||
$logger->addInfo($args,[$_SESSION['NAMA_PEGAWAI'],$url,$query,$ip]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function query($query) {
|
||||
if ($this->stmt = $this->connection->prepare($query)) {
|
||||
if (func_num_args() > 1) {
|
||||
$x = func_get_args();
|
||||
$args = array_slice($x, 1);
|
||||
$types = '';
|
||||
$args_ref = array();
|
||||
foreach ($args as $k => &$arg) {
|
||||
if (is_array($args[$k])) {
|
||||
foreach ($args[$k] as $j => &$a) {
|
||||
$types .= $this->_gettype($args[$k][$j]);
|
||||
$args_ref[] = &$a;
|
||||
}
|
||||
} else {
|
||||
$types .= $this->_gettype($args[$k]);
|
||||
$args_ref[] = &$arg;
|
||||
}
|
||||
}
|
||||
array_unshift($args_ref, $types);
|
||||
call_user_func_array(array($this->stmt, 'bind_param'), $args_ref);
|
||||
}
|
||||
if($this->debugging == TRUE)
|
||||
{
|
||||
$this->debug($query,'info');
|
||||
}
|
||||
$this->stmt->execute();
|
||||
$this->insertid = $this->stmt->insert_id;
|
||||
if($this->stmt->result_metadata()){
|
||||
$this->stmt->store_result();
|
||||
$this->num_rows = $this->stmt->num_rows;
|
||||
$this->result_metadata = $this->stmt->result_metadata();
|
||||
|
||||
$params = array();
|
||||
$meta = $this->result_metadata;
|
||||
$this->fetch_field = [];
|
||||
while ($field = $meta->fetch_field()) {
|
||||
$params[] = &$row[$field->name];
|
||||
$this->fetch_field[] = (array) $field;
|
||||
}
|
||||
call_user_func_array(array($this->stmt, 'bind_result'), $params);
|
||||
|
||||
$result = [];
|
||||
while ($this->stmt->fetch()) {
|
||||
$r = [];
|
||||
foreach ($row as $key => $val) {
|
||||
$r[$key] = $val;
|
||||
}
|
||||
array_push($result, $r);
|
||||
}
|
||||
$this->result_fetch = $result;
|
||||
}
|
||||
$this->stmt->close();
|
||||
|
||||
if ($this->connection->errno) {
|
||||
$this->debug('Unable to process MySQL query (check your params) - ' . $this->connection->error);
|
||||
$this->error = $this->connection->error;
|
||||
}
|
||||
$this->query_count++;
|
||||
} else {
|
||||
$this->debug('Unable to prepare statement (check your syntax) - ' . $query);
|
||||
$this->error = 'Unable to prepare statement';
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function fetchAll() {
|
||||
return $this->result_fetch;
|
||||
}
|
||||
|
||||
public function fetchFirst() {
|
||||
$result = $this->result_fetch[0];
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchLast() {
|
||||
$jml_data = count($this->result_fetch);
|
||||
$result = $this->result_fetch[$jml_data-1];
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchArray() {
|
||||
$params = array();
|
||||
$meta = $this->result_metadata;
|
||||
while ($field = $meta->fetch_field()) {
|
||||
$params[] = &$row[$field->name];
|
||||
}
|
||||
call_user_func_array(array($this->stmt, 'bind_result'), $params);
|
||||
$result = array();
|
||||
while ($this->stmt->fetch()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$result[$key] = $val;
|
||||
}
|
||||
}
|
||||
$this->stmt->close();
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function fetchField()
|
||||
{
|
||||
return $meta->fetch_field();
|
||||
}
|
||||
|
||||
public function numRows() {
|
||||
return $this->num_rows;
|
||||
}
|
||||
|
||||
public function close() {
|
||||
return $this->connection->close();
|
||||
}
|
||||
|
||||
public function affectedRows() {
|
||||
return $this->stmt->affected_rows;
|
||||
}
|
||||
|
||||
private function _gettype($var) {
|
||||
if(is_string($var)) return 's';
|
||||
if(is_float($var)) return 'd';
|
||||
if(is_int($var)) return 'i';
|
||||
return 'b';
|
||||
}
|
||||
|
||||
public function escape($string)
|
||||
{
|
||||
return $this->connection->escape_string($string);
|
||||
}
|
||||
|
||||
public function getError()
|
||||
{
|
||||
return $this->error;
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user