php mysql 数据库框架_超轻量级PHP SQL数据库框架

/**

* ! Medoo 0.8.5 - Copyright 2013, Angel Lai - MIT license - http://medoo.in

*/

class medoo{

protected $database_type = 'mysql';

// For MySQL, MSSQL, Sybase

protected $server = 'localhost';

protected $username = 'username';

protected $password = 'password';

// For SQLite

protected $database_file = '';

// Optional

protected $charset = 'utf8';

protected $database_name = '';

protected $option = array();

public function __construct($options){

try{

$type = strtolower($this -> database_type);

if(is_string($options)){

if($type == 'sqlite'){

$this -> database_file = $options;

}else{

$this -> database_name = $options;

}

}else{

foreach($options as $option => $value){

$this -> $option = $value;

}

}

$type = strtolower($this -> database_type);

switch($type){

case 'mysql':case 'pgsql':$this -> pdo = new PDO($type . ':host=' . $this -> server . ';dbname=' . $this -> database_name, $this -> username, $this -> password, $this -> option);

break;

case 'mssql':case 'sybase':$this -> pdo = new PDO($type . ':host=' . $this -> server . ';dbname=' . $this -> database_name . ',' . $this -> username . ',' . $this -> password, $this -> option);

break;

case 'sqlite':$this -> pdo = new PDO($type . ':' . $this -> database_file, $this -> option);

break;

}

$this -> pdo -> exec('SET NAMES \'' . $this -> charset . '\'');

}

catch(PDOException$e){

echo $e -> getMessage();

}

}

public function query($query){

$this -> queryString = $query;

return $this -> pdo -> query($query);

}

public function exec($query){

$this -> queryString = $query;

return $this -> pdo -> exec($query);

}

public function quote($string){

return $this -> pdo -> quote($string);

}

protected function array_quote($array){

$temp = array();

foreach($array as $value){

$temp[] = is_int($value)?$value:$this -> pdo -> quote($value);

}

return implode($temp, ',');

}

protected function inner_conjunct($data, $conjunctor, $outer_conjunctor){

$haystack = array();

foreach($data as $value){

$haystack[] = '(' . $this -> data_implode($value, $conjunctor) . ')';

}

return implode($outer_conjunctor . ' ', $haystack);

}

protected function data_implode($data, $conjunctor, $outer_conjunctor = null){

$wheres = array();

foreach($data as $key => $value){

if(($key == 'AND' || $key == 'OR') && is_array($value)){

$wheres[] = 0 !== count(array_diff_key($value, array_keys(array_keys($value))))?'(' . $this -> data_implode($value, ' ' . $key) . ')':'(' . $this -> inner_conjunct($value, ' ' . $key, $conjunctor) . ')';

}else{

preg_match('/([\w\.]+)(\[(\>|\>\=|\)\])?/i', $key, $match);

if(isset($match[3])){

if($match[3] == '' || $match[3] == '!'){

$wheres[] = $match[1] . ' ' . $match[3] . '= ' . $this -> quote($value);

}else{

if($match[3] == '<>'){

if(is_array($value)){

if(is_numeric($value[0]) && is_numeric($value[1])){

$wheres[] = $match[1] . ' BETWEEN ' . $value[0] . ' AND ' . $value[1];

}else{

$wheres[] = $match[1] . ' BETWEEN ' . $this -> quote($value[0]) . ' AND ' . $this -> quote($value[1]);

}

}

}else{

if(is_numeric($value)){

$wheres[] = $match[1] . ' ' . $match[3] . ' ' . $value;

}

}

}

}else{

if(is_int($key)){

$wheres[] = $this -> quote($value);

}else{

switch(gettype($value)){

case 'NULL':$wheres[] = $match[1] . ' IS null';

break;

case 'array':$wheres[] = $match[1] . ' IN (' . $this -> array_quote($value) . ')';

break;

default:$wheres[] = $match[1] . ' = ' . $this -> quote($value);

break;

}

}

}

}

}

return implode($conjunctor . ' ', $wheres);

}

public function where_clause($where){

$where_clause = '';

if(is_array($where)){

$single_condition = array_diff_key($where, array_flip(explode(' ', 'AND OR GROUP ORDER HAVING LIMIT LIKE MATCH')));

if($single_condition != array()){

$where_clause = ' WHERE ' . $this -> data_implode($single_condition, '');

}

if(isset($where['AND'])){

$where_clause = ' WHERE ' . $this -> data_implode($where['AND'], ' AND ');

}

if(isset($where['OR'])){

$where_clause = ' WHERE ' . $this -> data_implode($where['OR'], ' OR ');

}

if(isset($where['LIKE'])){

$like_query = $where['LIKE'];

if(is_array($like_query)){

$is_OR = isset($like_query['OR']);

if($is_OR || isset($like_query['AND'])){

$connector = $is_OR?'OR':'AND';

$like_query = $is_OR?$like_query['OR']:$like_query['AND'];

}else{

$connector = 'AND';

}

$clause_wrap = array();

foreach($like_query as $column => $keyword){

if(is_array($keyword)){

foreach($keyword as $key){

$clause_wrap[] = $column . ' LIKE ' . $this -> quote('%' . $key . '%');

}

}else{

$clause_wrap[] = $column . ' LIKE ' . $this -> quote('%' . $keyword . '%');

}

}

$where_clause .= ($where_clause != ''?' AND ':' WHERE ') . '(' . implode($clause_wrap, ' ' . $connector . ' ') . ')';

}

}

if(isset($where['MATCH'])){

$match_query = $where['MATCH'];

if(is_array($match_query) && isset($match_query['columns']) && isset($match_query['keyword'])){

$where_clause .= ($where_clause != ''?' AND ':' WHERE ') . ' MATCH (' . implode($match_query['columns'], ', ') . ') AGAINST (' . $this -> quote($match_query['keyword']) . ')';

}

}

if(isset($where['GROUP'])){

$where_clause .= ' GROUP BY ' . $where['GROUP'];

}

if(isset($where['ORDER'])){

$where_clause .= ' ORDER BY ' . $where['ORDER'];

if(isset($where['HAVING'])){

$where_clause .= ' HAVING ' . $this -> data_implode($where['HAVING'], '');

}

}

if(isset($where['LIMIT'])){

if(is_numeric($where['LIMIT'])){

$where_clause .= ' LIMIT ' . $where['LIMIT'];

}

if(is_array($where['LIMIT']) && is_numeric($where['LIMIT'][0]) && is_numeric($where['LIMIT'][1])){

$where_clause .= ' LIMIT ' . $where['LIMIT'][0] . ',' . $where['LIMIT'][1];

}

}

}else{

if($where != null){

$where_clause .= ' ' . $where;

}

}

return $where_clause;

}

public function select($table, $columns, $where = null){

$where_clause = $this -> where_clause($where);

preg_match('/([a-zA-Z0-9_-]*)\s*(\[(\|\>\)\])?\s*([a-zA-Z0-9_-]*)/i', $table, $match);

if($match[3] != '' && $match[4] != ''){

$join_array = array('>' => 'LEFT', ' 'RIGHT', '<>' => 'FULL', '> 'INNER');

$table = $match[1] . ' ' . $join_array[$match[3]] . ' JOIN ' . $match[4] . ' ON ';

$where_clause = str_replace(' WHERE ', '', $where_clause);

}

$query = $this -> query('SELECT ' . (is_array($columns)?implode(', ', $columns):$columns) . ' FROM ' . $table . $where_clause);

return $query?$query -> fetchAll((is_string($columns) && $columns != '*')?PDO :: FETCH_COLUMN:PDO :: FETCH_ASSOC):false;

}

public function insert($table, $data){

$keys = implode(',', array_keys($data));

$values = array();

foreach($data as $key => $value){

$values[] = is_array($value)?serialize($value):$value;

}

$this -> exec('INSERT INTO ' . $table . ' (' . $keys . ') VALUES (' . $this -> data_implode(array_values($values), ',') . ')');

return $this -> pdo -> lastInsertId();

}

public function update($table, $data, $where = null){

$fields = array();

foreach($data as $key => $value){

if(is_array($value)){

$fields[] = $key . '=' . $this -> quote(serialize($value));

}else{

preg_match('/([\w]+)(\[(\+|\-)\])?/i', $key, $match);

if(isset($match[3])){

if(is_numeric($value)){

$fields[] = $match[1] . ' = ' . $match[1] . ' ' . $match[3] . ' ' . $value;

}

}else{

$fields[] = $key . ' = ' . $this -> quote($value);

}

}

}

return $this -> exec('UPDATE ' . $table . ' SET ' . implode(',', $fields) . $this -> where_clause($where));

}

public function delete($table, $where){

return $this -> exec('DELETE FROM ' . $table . $this -> where_clause($where));

}

public function replace($table, $columns, $search = null, $replace = null, $where = null){

if(is_array($columns)){

$replace_query = array();

foreach($columns as $column => $replacements){

foreach($replacements as $replace_search => $replace_replacement){

$replace_query[] = $column . ' = REPLACE(' . $column . ', ' . $this -> quote($replace_search) . ', ' . $this -> quote($replace_replacement) . ')';

}

}

$replace_query = implode(', ', $replace_query);

$where = $search;

}else{

if(is_array($search)){

$replace_query = array();

foreach($search as $replace_search => $replace_replacement){

$replace_query[] = $columns . ' = REPLACE(' . $columns . ', ' . $this -> quote($replace_search) . ', ' . $this -> quote($replace_replacement) . ')';

}

$replace_query = implode(', ', $replace_query);

$where = $replace;

}else{

$replace_query = $columns . ' = REPLACE(' . $columns . ', ' . $this -> quote($search) . ', ' . $this -> quote($replace) . ')';

}

}

return $this -> exec('UPDATE ' . $table . ' SET ' . $replace_query . $this -> where_clause($where));

}

public function get($table, $columns, $where = null){

if(is_array($where)){

$where['LIMIT'] = 1;

}

$data = $this -> select($table, $columns, $where);

return isset($data[0])?$data[0]:false;

}

public function has($table, $where){

return $this -> query('SELECT EXISTS(SELECT 1 FROM ' . $table . $this -> where_clause($where) . ')') -> fetchColumn() === '1';

}

public function count($table, $where = null){

return 0 + ($this -> query('SELECT COUNT(*) FROM ' . $table . $this -> where_clause($where)) -> fetchColumn());

}

public function max($table, $column, $where = null){

return 0 + ($this -> query('SELECT MAX(' . $column . ') FROM ' . $table . $this -> where_clause($where)) -> fetchColumn());

}

public function min($table, $column, $where = null){

return 0 + ($this -> query('SELECT MIN(' . $column . ') FROM ' . $table . $this -> where_clause($where)) -> fetchColumn());

}

public function avg($table, $column, $where = null){

return 0 + ($this -> query('SELECT AVG(' . $column . ') FROM ' . $table . $this -> where_clause($where)) -> fetchColumn());

}

public function sum($table, $column, $where = null){

return 0 + ($this -> query('SELECT SUM(' . $column . ') FROM ' . $table . $this -> where_clause($where)) -> fetchColumn());

}

public function error(){

return $this -> pdo -> errorInfo();

}

public function last_query(){

return $this -> queryString;

}

public function info(){

return array('server' => $this -> pdo -> getAttribute(PDO :: ATTR_SERVER_INFO), 'client' => $this -> pdo -> getAttribute(PDO :: ATTR_CLIENT_VERSION), 'driver' => $this -> pdo -> getAttribute(PDO :: ATTR_DRIVER_NAME), 'version' => $this -> pdo -> getAttribute(PDO :: ATTR_SERVER_VERSION), 'connection' => $this -> pdo -> getAttribute(PDO :: ATTR_CONNECTION_STATUS));

}

}

?>

Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...

Android数据库框架——ORMLite轻量级的对象关系映射&lpar;ORM&rpar;Java包

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

腾讯正式开源高性能超轻量级 PHP 框架 Biny

概况 Biny是一款高性能的超轻量级PHP框架 遵循 MVC 模式,用于快速开发现代 Web 应用程序 Biny代码简洁优雅,对应用层,数据层,模板渲染层的封装简单易懂,能够快速上手使用 高性能,框架 ...

推荐一款轻量级PHP数据库框架–Medoo

引用官网的简介: 可以加快开发速度的最轻量级的PHP数据库框架 为什么选择Medoo及其主要功能: 轻量级–单个文件,只有20KB 易用–非常容易学习和使用 功能强大–支持各种常见和复杂的SQL查询 ...

ORM数据库框架 greenDAO SQLite MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

iOS---SQLite数据库框架之FMDB -Swift

SQLite数据库框架之FMDB 什么是FMDB? FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API.对比苹果自带的Core Data框架,更加轻量级 ...

Android 数据库框架ormlite

Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

ORM数据库框架 SQLite 常用数据库框架比较 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

SQLite数据库框架--FMDB简单介绍

1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比 ...

随机推荐

我的js函数库(持续更新)

常用js初始化函数 function id(obj) { return document.getElementById(obj); } function bind(obj, ev, fn) { if ...

Android 获取渠道名称

直接看代码, //获取渠道名称public static String getChannelName(Activity ctx) { if (ctx == null) { return null; } ...

python成长之路16

阅读(72) 一:jQuery是一个兼容多浏览器的javascript类库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发, ...

解决getElementsByClassName兼容问题

getElementsByClassName这个方法很常用,但是只有较新的浏览器才兼容,所以我们需要自己写个方法,解决这个问题,使它能够兼容各个浏览器. function getElementsByC ...

《Language Implementation Patterns》之访问&amp&semi;重写语法树

每个编程的人都学习过树遍历算法,但是AST的遍历并不是开始想象的那么简单.有几个因素会影响遍历算法:1)是否拥有节点的源码:2)是否子节点的访问方式是统一的:3)ast是homogeneous或het ...

Back To Top

//scroll to top (function ($) { $.fn.backTop = function () { var backBtn = this; var position = 1000 ...

在windows上自动备份SVN版本库及定时删除

下面的脚本是在windows SVN的备份策略,采用的是hotcopy的方法 方案一: 1.先创建一个fullBackup的脚本:fullBackup.bat echo off rem Subvers ...

php soap实例讲解

一,什么是soap,什么是wsdl,为什么要用他们 SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言.http呢它得到了所有的因特网浏览器及服务器的支持. WSDL ...

第十八次ScrumMeeting会议

第十八次Scrum Meeting 时间:2017/12/8 地点:线上+SPR咖啡馆 人员:蔡帜 王子铭 游心 解小锐 王辰昱 李金奇 杨森 陈鑫 赵晓宇 照片: 目前工作进展 名字 今日 明天的工 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值