一个不错的MySQL类
包含CRUD,事务,树递归查询,分页等. 演示简单的魅力. 所有的参数都escape了,不存在注入问题.
/*
* Anthony.chen
* 2010 reserved
*/
class DB {
// Query types
const SELECT = 1;
const INSERT = 2;
const UPDATE = 3;
const DELETE = 4;
const T = 't';
const F = 'f';
/*
* Supporting return multiple data;
*/
public static function insert_table($table_name,$data,$return_id='id',$db='default'){
if (!is_array($data)){
return false;
}
if (is_null($return_id)){
self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data)))->execute($db);
return true;
}
if (is_string($return_id)){
$id = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$return_id)->execute($db)->get($return_id);
return $id;
}else{
if (is_array($return_id)){
$ids = implode(',',$return_id);
$r_ids = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returning ".$ids)->execute($db)->current();
return $r_ids;
}
}
return false;
}
public static function update_table($table_name,$id,$data,$id_name='id',$db='default'){
if (!is_array($data)){
return false;
}
return self::update($table_name)->set($data)->where($id_name ,'=',$id)->execute($db);
}
public static function quote($s,$db='default'){
if(!is_array($s)){
return Database::instance($db)->quote($s);
}else{ //Quote array and implode
$_qs = array();
foreach ($s as $ele){
$_qs[] = self::quote($ele,$db);
}
$_quoteString = implode(',',$_qs);
return $_quoteString;
}
}
public static function escape($s,$db='default'){
return Database::instance($db)->escape($s);
}
public static function quote_table($s,$db='default'){
return Database::instance($db)->quote_table($s);
}
public static function getConnection($db = 'default'){
return Database::instance($db)->getConnection();
}
public static function getChildren($table,$returnSql = false ,$pid= '0',$idname='id',$pidname='pid' ,$db='default'){
$_sql = 'select * from '.$table.' where '.$pidname.'='.self::escape($pid,$db).
" and $idname ".DB::escape($pid,$db);
if($returnSql){
return $_sql;
}
$_res = self::query(self::SELECT,$_sql)->execute($db)->as_array();
if($_res){
return $_res;
}else{
return false;
}
}
/*
*
*/
public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid', $orderCol='id', $maxDepth=0,$level = 0,$delimiter = ';',$db='default'){
$_funcParas = array();
$_funcParas[] = self::quote($tableName,$db); //TableView
$_funcParas[] = self::quote($idCol,$db); //ID column
$_funcParas[] = self::quote($pidCol,$db); //Parent ID Column
$_funcParas[] = self::quote($orderCol,$db); //Default Order by ASC
$_funcParas[] = self::quote($startWith,$db); //Begin NODE
$_funcParas[] = self::quote($maxDepth,$db); //Begin Depth of traverse
$_funcParas[] = self::quote($delimiter,$db); //Delimitor,default ';'
$_sql = 'select * from connectby('
.implode(',',$_funcParas).')'
.' as t(id int, pid int, level int, branch text, pos int)';
if($level > 0){
$_sql .= ' where level >='.self::quote($level);
}
if($returnSql) return $_sql;
$_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();
if($_res){
return $_res;
}else{
return false;
}
}
public static function begin($db='default'){
DB::query(Database::UPDATE, "BEGIN")->execute($db);
}
public static function commit($db='default'){
DB::query(Database::UPDATE, "COMMIT")->execute($db);
}
public static function rollback($db='default'){
DB::query(Database::UPDATE, "ROLLBACK")->execute($db);
}
/**
* Create a new [Database_Query] of the given type.
*
* // Create a new SELECT query
* $query = DB::query(Database::SELECT, 'SELECT * FROM users');
*
* // Create a new DELETE query
* $query = DB::query(Database::DELETE, 'DELETE FROM users WHERE id = 5');
*
* Specifying the type changes the returned result. When using
* `Database::SELECT`, a [Database_Query_Result] will be returned.
* `Database::INSERT` queries will return the insert id and number of rows.
* For all other queries, the number of affected rows is returned.
*
* @param integer type: Database::SELECT, Database::UPDATE, etc
* @param string SQL statement
* @return Database_Query
*/
public static function query($type, $sql,$as_object = false)
{
return new Database_Query($type, $sql,$as_object);
}
/**
* Create a new [Database_Query_Builder_Select]. Each argument will be
* treated as a column. To generate a `foo AS bar` alias, use an array.
*
* // SELECT id, username
* $query = DB::select('id', 'username');
*
* // SELECT id AS user_id
* $query = DB::select(array('id', 'user_id'));
*
* @param mixed column name or array($column, $alias) or object
* @param ...
* @return Database_Query_Builder_Select
*/
public static function select($columns = NULL)
{
return new Database_Query_Builder_Select(func_get_args());
}
/**
* Create a new [Database_Query_Builder_Select] from an array of columns.
*
* // SELECT id, username
* $query = DB::select_array(array('id', 'username'));
*
* @param array columns to select
* @return Database_Query_Builder_Select
*/
public static function select_array(array $columns = NULL)
{
return new Database_Query_Builder_Select($columns);
}
/**
* Create a new [Database_Query_Builder_Insert].
*
* // INSERT INTO users (id, username)
* $query = DB::insert('users', array('id', 'username'));
*
* @param string table to insert into
* @param array list of column names or array($column, $alias) or object
* @return Database_Query_Builder_Insert
*/
public static function insert($table = NULL, array $columns = NULL)
{
return new Database_Query_Builder_Insert($table, $columns);
}
/**
* Create a new [Database_Query_Builder_Update].
*
* // UPDATE users
* $query = DB::update('users');
*
* @param string table to update
* @return Database_Query_Builder_Update
*/
public static function update($table = NULL)
{
return new Database_Query_Builder_Update($table);
}
/**
* Create a new [Database_Query_Builder_Delete].
*
* // DELETE FROM users
* $query = DB::delete('users');
*
* @param string table to delete from
* @return Database_Query_Builder_Delete
*/
public static function delete($table = NULL)
{
return new Database_Query_Builder_Delete($table);
}
/**
* Create a new [Database_Expression] which is not escaped. An expression
* is the only way to use SQL functions within query builders.
*
* $expression = DB::expr('COUNT(users.id)');
*
* @param string expression
* @return Database_Expression
*/
public static function expr($string){
return new Database_Expression($string);
}
/*
* Gettting paginated page
*/
public static function getPage($_sql,&$page,$orderBy ='updated desc', $dataPro='data',$pagePro = 'pagination',
$config = NULL,$db = 'default',$as_object= true){
$_csql = 'select count(1) as c from ('.$_sql.') st';
$_c = DB::query(DB::SELECT,$_csql)->execute($db)->get('c');
if($config){
$config['total_items'] = $_c;
$_pagination = new Pagination($config);
}else{
$config = array();
$config['total_items'] = $_c;
$_pagination = new Pagination($config);
}
$_sql .= ' order by '.$orderBy;
if($_pagination->offset){
$_sql .= ' offset '.$_pagination->offset;
}
$_sql .= ' limit '.$_pagination->items_per_page;
$_data = DB::query(DB::SELECT,$_sql,$as_object)->execute($db)->as_array();
if(!$_data){
$page->{$dataPro} = false;
$page->{$pagePro} = false;
return false;
}
$page->{$dataPro} = $_data;
$page->{$pagePro} = $_pagination;
return true;
}
/*
* Get All roles
* level to control the statrt
*/
public static function getRoleTreeSql($role_id,$quote = false,$role_table,$level=0,$db='default'){
$_sql = 'select id from ('.self::getTree($role_table,true,$role_id,'id','pid','id',
0, //Maxdepth
$level, //Level
';',$db).') utree';
if(!$quote) return $_sql;
else return '('.$_sql.')';
}
/*
* Return sub query on Objects authorization
* Child role objects and owned objects
* Parent control
*/
public static function getCURTreeSql($role_id,$user_id,$role_table,$quote = true,
$role='role_id',$owner = 'owner_id' ,$db='default'){
$_sql = ' '.$role.' in '.self::getRoleTreeSql($role_id,true,$role_table,
1, //Level start with 1
$db). ' or '.$owner.'='.DB::quote($user_id);
if(!$quote) return $_sql;
else return '('.$_sql.')';
}
}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

discuz database error的解决办法有:1、检查数据库配置;2、确保数据库服务器正在运行;3、检查数据库表状态;4、备份数据;5、清理缓存;6、重新安装Discuz;7、检查服务器资源;8、联系Discuz官方支持。解决Discuz数据库错误需要从多个方面入手,逐步排查问题原因,并采取相应的措施进行修复。

英特尔ArrowLake预计将基于与LunarLake相同的处理器架构,这意味着英特尔全新的LionCove性能核心将与经济的Skymont效率核心相结合。而LunarLake仅作为ava推出

C语言return的用法有:1、对于返回值类型为void的函数,可以使用return语句来提前结束函数的执行;2、对于返回值类型不为void的函数,return语句的作用是将函数的执行结果返回给调用者;3、提前结束函数的执行,在函数内部,我们可以使用return语句来提前结束函数的执行,即使函数并没有返回值。

源码:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#输出上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在

使用golang进行SelectChannelsGo并发式编程的异步处理方法引言:并发式编程是现代软件开发中的一个重要领域,它可以有效地提高应用程序的性能和响应能力。在Go语言中,使用Channels和Select语句可以简单而高效地实现并发编程。本文将介绍如何使用golang进行SelectChannelsGo并发式编程的异步处理方法,并提供具体的

jquery隐藏select元素的方法:1、hide()方法,在HTML页面中引入jQuery库,可以使用不同选择器来隐藏select元素,ID选择器将selectId替换为你实际使用的select元素的ID;2、css()方法,使用ID选择器选择需要隐藏的select元素,使用css()方法将display属性设置为none,并将selectId替换为select元素的ID。

在这篇文章中,我们将向你展示如何通过拖放在PowerQuery中对多列进行重新排序。通常,从各种来源导入数据时,列可能不是所需的顺序。重新排序列不仅允许您按照符合您的分析或报告需求的逻辑顺序排列它们,还可以提高数据的可读性,并加快过滤、排序和执行计算等任务。如何在Excel中重新排列多个列?在Excel中,重新排列列的方法有多种。您可以简单地选择列标题,然后将其拖动到所需位置。但是,当处理包含许多列的大表时,这种方法可能会变得繁琐。为了更高效地重新排列列,您可以使用增强查询编辑器。通过增强查询编

jQuery是一个流行的JavaScript库,可以用来简化DOM操作、事件处理、动画效果等。在web开发中,经常会遇到需要对select元素进行改变事件绑定的情况。本文将介绍如何使用jQuery实现对select元素改变事件的绑定,并提供具体的代码示例。首先,我们需要使用标签来创建一个包含选项的下拉菜单:
