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;
      }
    }
  }
};
?>

Last updated