mirror of
https://github.com/Rushilwiz/brancher.git
synced 2025-04-21 12:30:16 -04:00
160 lines
4.0 KiB
PHP
160 lines
4.0 KiB
PHP
<?php
|
|
namespace Phppot;
|
|
|
|
/**
|
|
* Generic datasource class for handling DB operations.
|
|
* Uses MySqli and PreparedStatements.
|
|
*
|
|
* @version 2.3
|
|
*/
|
|
class DataSource
|
|
{
|
|
|
|
// PHP 7.1.0 visibility modifiers are allowed for class constants.
|
|
// when using above 7.1.0, declare the below constants as private
|
|
const HOST = 'localhost';
|
|
|
|
const USERNAME = 'root';
|
|
|
|
const PASSWORD = 'test';
|
|
|
|
const DATABASENAME = 'phpsamples';
|
|
|
|
private $conn;
|
|
|
|
/**
|
|
* PHP implicitly takes care of cleanup for default connection types.
|
|
* So no need to worry about closing the connection.
|
|
*
|
|
* Singletons not required in PHP as there is no
|
|
* concept of shared memory.
|
|
* Every object lives only for a request.
|
|
*
|
|
* Keeping things simple and that works!
|
|
*/
|
|
function __construct()
|
|
{
|
|
$this->conn = $this->getConnection();
|
|
}
|
|
|
|
/**
|
|
* If connection object is needed use this method and get access to it.
|
|
* Otherwise, use the below methods for insert / update / etc.
|
|
*
|
|
* @return \mysqli
|
|
*/
|
|
public function getConnection()
|
|
{
|
|
$conn = new \mysqli(self::HOST, self::USERNAME, self::PASSWORD, self::DATABASENAME);
|
|
|
|
if (mysqli_connect_errno()) {
|
|
trigger_error("Problem with connecting to database.");
|
|
}
|
|
|
|
$conn->set_charset("utf8");
|
|
return $conn;
|
|
}
|
|
|
|
/**
|
|
* To get database results
|
|
* @param string $query
|
|
* @param string $paramType
|
|
* @param array $paramArray
|
|
* @return array
|
|
*/
|
|
public function select($query, $paramType="", $paramArray=array())
|
|
{
|
|
$stmt = $this->conn->prepare($query);
|
|
|
|
if(!empty($paramType) && !empty($paramArray)) {
|
|
$this->bindQueryParams($sql, $paramType, $paramArray);
|
|
}
|
|
|
|
$stmt->execute();
|
|
$result = $stmt->get_result();
|
|
|
|
if ($result->num_rows > 0) {
|
|
while ($row = $result->fetch_assoc()) {
|
|
$resultset[] = $row;
|
|
}
|
|
}
|
|
|
|
if (! empty($resultset)) {
|
|
return $resultset;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* To insert
|
|
* @param string $query
|
|
* @param string $paramType
|
|
* @param array $paramArray
|
|
* @return int
|
|
*/
|
|
public function insert($query, $paramType, $paramArray)
|
|
{
|
|
print $query;
|
|
$stmt = $this->conn->prepare($query);
|
|
$this->bindQueryParams($stmt, $paramType, $paramArray);
|
|
$stmt->execute();
|
|
$insertId = $stmt->insert_id;
|
|
return $insertId;
|
|
}
|
|
|
|
/**
|
|
* To execute query
|
|
* @param string $query
|
|
* @param string $paramType
|
|
* @param array $paramArray
|
|
*/
|
|
public function execute($query, $paramType="", $paramArray=array())
|
|
{
|
|
$stmt = $this->conn->prepare($query);
|
|
|
|
if(!empty($paramType) && !empty($paramArray)) {
|
|
$this->bindQueryParams($stmt, $paramType="", $paramArray=array());
|
|
}
|
|
$stmt->execute();
|
|
}
|
|
|
|
/**
|
|
* 1. Prepares parameter binding
|
|
* 2. Bind prameters to the sql statement
|
|
* @param string $stmt
|
|
* @param string $paramType
|
|
* @param array $paramArray
|
|
*/
|
|
public function bindQueryParams($stmt, $paramType, $paramArray=array())
|
|
{
|
|
$paramValueReference[] = & $paramType;
|
|
for ($i = 0; $i < count($paramArray); $i ++) {
|
|
$paramValueReference[] = & $paramArray[$i];
|
|
}
|
|
call_user_func_array(array(
|
|
$stmt,
|
|
'bind_param'
|
|
), $paramValueReference);
|
|
}
|
|
|
|
/**
|
|
* To get database results
|
|
* @param string $query
|
|
* @param string $paramType
|
|
* @param array $paramArray
|
|
* @return array
|
|
*/
|
|
public function numRows($query, $paramType="", $paramArray=array())
|
|
{
|
|
$stmt = $this->conn->prepare($query);
|
|
|
|
if(!empty($paramType) && !empty($paramArray)) {
|
|
$this->bindQueryParams($stmt, $paramType, $paramArray);
|
|
}
|
|
|
|
$stmt->execute();
|
|
$stmt->store_result();
|
|
$recordCount = $stmt->num_rows;
|
|
return $recordCount;
|
|
}
|
|
}
|