Hoàn thiện xây dựng function, select && function renderStatement 9.2(ok)
<?php
require_once 'database.php';
class Mysql {
public $config = [];
public $keywords = [
'>=',
'<=',
'>',
'<',
'IN',
'NOT',
'IS',
'LIKE',
'!=',
'<>',
];
static $instance = null;
public function __construct($config = []) {
$this->config = $config;
return $this->connect();
}
public static function getInstance() {
$config = [
'host' => DATABASE_HOST,
'login' => DATABASE_USERNAME,
'password' => DATABASE_PASSWORD,
'port' => DATABASE_PORT,
'database' => DATABASE_NAME,
'encoding' => 'utf8',
];
if (null === Mysql::$instance) {
Mysql::$instance = new Mysql($config);
}
return Mysql::$instance;
}
public function connect() {
$config = $this->config;
$this->connected = false;
$this->connection = mysqli_connect($config['host'], $config['login'], $config['password'], $config['database']);
if ($this->connection != false) {
$this->connected = true;
}
$this->setEncoding($config['encoding']);
return $this->connected;
}
public function setEncoding($enc) {
return $this->_execute('SET NAMES ' . $enc) != false;
}
public function _execute($sql) {
return mysqli_query($this->connection, $sql);
}
protected function buildConditions($condition) {
if (empty($condition)) {
return;
}
$index = 0;
$conditionArray = [];
foreach ($condition as $field => $sub) {
$math = '';
if (!in_array($sub, $keywords)) {
$math = '=';
}
$conditionArray[] = " " . $field . " " . $math . " '" . $sub . "' ";
}
return " WHERE " . implode(' AND ', $conditionArray);
}
function select($myTable, $options = array(), $isCount = false) {
// $options is
// array (
// 'conditions' =>
// array (
// 'email' => 'admin@gmail.com',
// 'password' => '7c4a8d09ca3762af61e59520943dc26494f8941b',
// ),
// )
$myFields = isset($options['fields']) ? $options['fields'] : '*';
$conditions = isset($options['conditions']) ? $options['conditions'] : null;
try {
$returnArr = array();
$table = $myTable;
$alias = $joins = $order = $group = $limit = "";
$fields = "";
if (is_array($myFields)) {
$fields = implode(', ', $myFields);
} else {
$fields = $myFields;
}
$conditions = $this->buildConditions($conditions);
// $conditions is " WHERE email = 'admin@gmail.com' AND password = '7c4a8d09ca3762af61e59520943dc26494f8941b' "
$tmpTable = explode('_', $table);
// array (
// 0 => 'user',
// )
$alias = array();
foreach ($tmpTable as $tmp) {
$alias[] = ucfirst($tmp);
}
$alias = implode($alias);
// $alias is User
$query = compact('table', 'alias', 'joins', 'fields', 'conditions', 'joins', 'group', 'order', 'limit');
// array (
// 'table' => 'user',
// 'alias' => 'User',
// 'joins' => '',
// 'fields' => '*',
// 'conditions' => ' WHERE email = \'wordpress\' AND password = \'b1909932aac1c5510c044de0cb8c0f3ef049a250\'',
// 'group' => '',
// 'order' => '',
// 'limit' => '',
// )
$sql = $this->renderStatement('select', $query);
// $sql is " SELECT * FROM user User WHERE email = 'admin@gmail.com' AND password = '7c4a8d09ca3762af61e59520943dc26494f8941b' "
}catch (Exception $ex) {
var_dump($ex);
}
function renderStatement($type, $data) {
extract($data);
switch (strtolower($type)) {
case 'select':
return "SELECT {$fields} FROM {$table} {$alias} {$joins} {$conditions} {$group} {order} {$limit}";
break;
}
}
}
};
?>
PreviousXây dựng function renderStatement 9.1(ok)NextHiểu sâu về mysqli_errno(connection), mysqli_error(connection) (ok)
Last updated
Was this helpful?