- 浏览: 1742666 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
<?php class xser_dbo_mysql_sqlbuilder extends xser_dbo_sqlbuilder { private $db_link_identifier ; static function instance($db_link_identifier){ if (!is_resource($db_link_identifier)) throw new Exception('INVALID db_link_identifier'); static $instance; if (is_null($instance)) $instance = new xser_dbo_mysql_sqlbuilder(); $instance->db_link_identifier = $db_link_identifier ; return $instance; } public function escape_value($value){ if (is_int($value) || is_float($value)) { return $value; } if (is_bool($value)) { return $value ? 1 : 0; } if (is_null($value)) { return 'NULL'; } return "'" . mysql_real_escape_string($value, $this->db_link_identifier) . "'"; } public function sql_limit($length,$offset = null){ $sql = '' ; if ( !empty($offset) ){ $sql = sprintf(' limit %d , %d', (int)$offset ,empty($length) ? (int)$length : 4294967294) ; } else if (!empty($length)){ $sql = " limit " . (int)$length; } return $sql ; } } // 简单的通用sql生成器 abstract class xser_dbo_sqlbuilder { // insert into table_name (f1,f2[,..]) values(v1,v2[,..]) const tpl_sql_insert = 'insert into %s (%s) values(%s)' ; // select f1,f2[,..] from table_name [sql_conditions][sql_sort] [sql_limit] const tpl_sql_select = 'select %s from %s %s %s %s' ; // update table_name set pair1,pair2 [sql_conditions] const tpl_sql_update = 'update %s set %s %s' ; protected $meta_table = array(); public abstract function escape_value($value); public abstract function sql_limit($length,$offset = null); /** * 重新初始化表元信息 * @param array $meta_table 表元信息 * @return xser_dbo_sqlbuilder */ public function table($meta_table){ $this->meta_table = $meta_table ;return $this ; } public function sql_insert($record){ if (xser::varify_provider()->not_null_array($record)){ $_row = array_map(array(& $this,'escape_value'),$record); $columns = implode(',',array_keys($_row)) ; $values = implode(',',array_values($_row)) ; return sprintf(self::tpl_sql_insert, $this->meta_table['table'],$columns,$values); } return '' ; } public function sql_update($record,$conditions=null){ if (!empty($record) && is_array($record)){ $_row = array_map(array(& $this,'escape_value'),$record); $sql_conditions = empty($conditions)? '' : $this->sql_conditions($conditions); $pairs = array(); foreach ($_row as $field=>$val){ $pairs[] = "{$field}={$val}" ; } $pairs = implode(',',$pairs) ; return sprintf(self::tpl_sql_update, $this->meta_table['table'],$pairs,$sql_conditions); } return '' ; } public function sql_select($conditions = null, $sort = null, $limit = null, $fields = '*'){ // 处理排序 $sql_sort = $sort != '' ? " order by {$sort}" : ''; if (is_array($limit)) { list($length, $offset) = $limit; } else { $length = $limit;$offset = null; } $sql_limit = empty($length)? '' : $this->sql_limit($length,$offset); $sql_conditions = empty($conditions)? '' : $this->sql_conditions($conditions); return sprintf(self::tpl_sql_select, $fields ,$this->meta_table['table'] ,$sql_conditions,$sql_sort,$sql_limit ); } public function sql_conditions($conditions = null){ if (empty($conditions)) return '' ; $sql = ' where '; if (is_string($conditions) ) return $sql . $conditions ; else if (is_array($conditions)){ $join_char = '' ;// 第一个条件前面 没有 and 连接符 foreach ($conditions as $field=>$cond){ // 支持 like / or 等操作 例如: 'name' => array('%Bob%','like') $op_char = '=' ; if (is_array($cond)){ $value = array_shift($cond); // if $value is array , will use "in" [] opchar if (is_array($value)){ $value = array_map(array(& $this,'escape_value'),$value); $value = '[' . implode(',',$value) . ']' ; } $_op_char = array_shift($cond); if (!empty($_op_char) && is_string($_op_char)) $op_char = $_op_char ; }else { $value = $cond ; } // 过滤值 $value = $this->escape_value($value); $sql .= "{$join_char} {$field} {$op_char} {$value} " ; $join_char = ' and ' ; } return $sql ; } return '' ; } }
demo如下:
<?php class xser_rbac_table { // 表 protected $table = null ; protected $pk = null ; //当前表为主表,及当前表主键在子表中的外键字段 protected $link = null ; protected $link_fk = null ; //当前表为子表,及当前表主键在主表中的外键字段 protected $belong = null ; protected $belong_fk = null ; //多对多 protected $more_to_more = null ; protected $meta_table = null ; function create($row,$msg=null,$affected_rows=0){ $this->_before_create($row); $sql = $this->sqlbuilder()->sql_insert($row); xser::dbo_provider()->execute($sql,$msg,$affected_rows); return $affected_rows > 0 ; } function update($row,$conditions=null,$msg=null,$affected_rows=0){ $sql = $this->sqlbuilder()->sql_update($row,$conditions); xser::dbo_provider()->execute($sql,$msg,$affected_rows); return $affected_rows > 0 ; } function find_one($conditions=null, $fields = '*',$msg=null){ $sql = $this->sqlbuilder()->sql_select($conditions,null,1,$fields); return xser::dbo_provider()->find_one($sql,$msg); } // 1:more , 仅仅支持单主键 function more_links($current,$fields = '*',$msg=null){ $sql = "select {$fields} from {$this->link}" ; $conditions = array($this->link_fk => $current[$this->pk]); $sql .= $this->sqlbuilder()->sql_conditions($conditions); return xser::dbo_provider()->find_all($sql,$msg); } // 1:one , 仅仅支持单主键 function one_link($current,$fields = '*',$msg=null){ $sql = "select {$fields} from {$this->link}" ; $conditions = array($this->link_fk => $current[$this->pk]); $sql .= $this->sqlbuilder()->sql_conditions($conditions); return xser::dbo_provider()->find_one($sql,$msg); } // 定位,当前对象从属于哪个对象 function belongs_to($current,$fields = '*',$msg=null){ $sql = "select {$fields} from {$this->belong}" ; $conditions = array($this->belong_fk => $current[$this->pk]); $sql .= $this->sqlbuilder()->sql_conditions($conditions); return xser::dbo_provider()->find_one($sql,$msg); } function find_more($conditions=null, $fields = '*',$msg=null){ $sql = $this->sqlbuilder()->sql_select($conditions,null,null,$fields); return xser::dbo_provider()->find_all($sql,$msg); } function _before_create(&$row){} /** * @return xser_dbo_sqlbuilder */ protected function sqlbuilder($table){ if (empty($this->meta_table)) $this->meta_table = array( 'table' => $this->table , 'pk' => $this->pk , 'fields' => xser::dbo_provider()->table_columns($this->table) ); return xser::dbo_provider()->sqlbuilder()->table($this->meta_table); } }
发表评论
-
ws-http 最简单轻量的PHP CURL工具库
2016-07-29 20:44 2549欢迎大家拍砖 https://github.com/to ... -
Facade 包装类 -- 解决视图里面长长的命名空间调用问题
2016-04-20 10:48 1652有时候模版里面定义 ... -
PHP单例模式面试注意事项
2015-10-20 09:57 1898最近面了不少PHP从业者,有实习生也有5/6年以上的开发者 ... -
NGINX 配置 SSL 证书 搭建 HTTPS 网站
2015-10-19 19:19 2859下面是详细的配置过程: 1、在服务器上使用 Open ... -
关于php cron任务管理的实现假想
2015-10-17 21:25 1824之前每开发一个计划任务功能均需要在线上操作crontab来新 ... -
修改一些PHP工具
2014-10-24 19:27 1740原来的代码 在非框架下是木有问题的,但是用在框架下就报错, ... -
sublime text linux上中文输入问题的终极解决方案
2014-10-13 11:07 8506我一直在使用sublime text ... -
qeephp3.0 发布了
2014-10-07 17:21 1655QeePHP 是一个快速、灵活的开发框架。应用各种成熟的架构 ... -
swiftmailer 的快捷助手 qser-mailer
2014-09-09 23:52 3543近日在对charsen的修改版上进行了再次的修改与调整,对 ... -
PHP 中简单的伪造IP刷票实现
2014-05-15 17:06 2675一般而言,我们的获取用户真实ip的代码大致是这样... / ... -
PHP5.5 htmlspecialchars 返回null的坑
2014-04-25 12:23 2561昨天在写 PDO数据库封装类的 测试代码时遇到这个问题,取 ... -
PHP 5.5 empty + 魔术变量 的坑
2014-04-16 15:53 1554今天在测试代码时遇到这么一个疑问? dump((in ... -
Aert_Log: 设计一个精简易用的日志
2014-04-13 18:28 2403日志记录对于应用的 ... -
创建一个简单的短链服务类
2013-07-01 18:20 1317整理一个简单的短链算法,整理到自己的代码库中: &l ... -
收集常用的PHP简单代码
2013-06-30 17:53 2002对于日常工作中整理出来的某些功能做个简单梳理: 1 ... -
简易PHP路由,支持正反向url解析支持
2013-06-21 22:23 8162几年前实现了一个简单的正向路由,那时候不会写反向路由解析, ... -
系统学习のCACHE 学习
2012-11-21 13:58 1839http://www.phpfans.net/article/ ... -
YY 下 sql查询封装类 不知道好不好使
2012-07-18 16:44 1282<?php class Pkg_Db_Actor { ... -
生成后台管理菜单 admin_menu 类
2012-05-05 18:27 4584<?php /** * 管理菜单 * */ ... -
抽取个sql生成器工具 -- 摘自 fuelphp1.1 版本
2012-04-25 20:17 1180<?php /** * Sql 创造者类 * ...
相关推荐
NULL 博文链接:https://vb2005xu.iteye.com/blog/618326
CH34XSER驱动(一些ESP32开发板需要该驱动),安装后需重启。 (该zip文件下有英文版驱动安装教程)
在网上找了半天才找到的ch340的mac驱动程序,前天买了一块arduino的板子,发现上边的USB转串口芯片用的是ch340的,windows7下可以自动安装驱动,但是在mac系统下发现找不到arduino的板子,找了半天才找到这个驱动。...
基于matlab实现的数值计算及金融运用 ,金融时间序列数据分析 ,MATLAB和其他软件数据连接.rar
使用SegNet进行语义分割-python源码.zip
JSP企业电子投票系统 2
EmotionVGGnet情绪识别-python源码.zip
基于matlab实现的遗传算法、模拟退火算法、禁忌搜索算法求解VRP问题的matlab程序.rar
大数据Python科学计算库-Numpy实战:numpy代码 练习题.ipynb 9-读写.ipynb 8-随机模块.ipynb 7-运算.ipynb 6-数组 生成.ipynb 5-数组形状.ipynb 4-排序.ipynb 3-数值计算. ipynb 2-array结构.ipynb 1-Numpy概述.ipynb 1- Numpy概述.ipynb 2-array结构.ipynb 3-数值计算.ipy nb 4-排序.ipynb 5-数组形状.ipynb 6-数组生成.ipynb 7-运算.ipynb 8-随机模块.ipynb 9-读写.ipynb 练习题.i pynb
本文档是课题研究的研究报告内含调研以及源码设计以及结果分析
基于BlazePose+KNN实现人体姿态健身计数算法python源码+项目说明.zip 项目描述: 实现基于mediapipe的人体姿态识别的AI健身自动计数功能 支持健身动作:1、俯卧撑 2、深蹲 3、引体向上 4、仰卧起坐 创建时间:2022.11.28 完成时间:2022.11.28 如何训练新的健身动作模型? 1、修改mian函数 2、首先在fitness_pose_images_in的文件夹下存储对应健身的初态动作与末态动作图像 3、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 4、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 5、修改trainingsetprocess.py文件中的代码,flag模式选择部分,注意 文件名 必须与fitness_pose_images_in文件夹下的文件名字保持一
Dijkstra 算法,又称为迪杰斯特拉算法,是一种用于解决单源最短 路径问题的经典算法。它的核心思想是通过逐步确定起点到其他顶 点的最短路径来求解。该算法被广泛应用于图论和网络路由等领域。 Dijkstra 算法的基本步骤如下: 1. 创建一个距离数组 dist[] ,用于存储起点到各个顶点的最短距离。 将起点的最短距离初始化为 0,其他顶点的最短距离初始化为无穷 大。 2. 创建一个集合 S ,用于存储已经找到最短路径的顶点。 3. 重复以下步骤,直到集合 S 包含所有顶点: a. 从距离数组 dist[]中选择最小值对应的顶点 v,将 v 加入集合 S。 b. 更新距离数组 dist[] : - 对于每个与 v 相邻的顶点 u,如果通过顶点 v 可以获得更短的 路径,则更新 dist[u]为更短的距离。 c. 重复步骤 a 和 b,直到集合 S 包含所有顶点。 4. 最终,距离数组 dist[]中存储的就是起点到各个顶点的最短路径。 下面通过一个简单的例子来说明 Dijkstra 算法的具体过程。假设有 一个带权有向图,其中的顶点和边分别如下所示:
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
IEC 60695-11-3:2012.pdf
机械设计电话自动组装产线非常好的设计图纸100%好用.zip
010editor是一款小巧专业的实用型编程工具,010editor官方版功能强悍,便捷好用,支持用户进行编辑十六进制和二进制,可选择自己需要的进制进行编辑,还可对任何的文件进行编辑。
点上面 附件图标,上传附件后可设置现金定价 2007-2022年各省份节能环保 支出占一般预算支出面板数据 已经整理成省级面板数据 手动整理不易
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
保护大堡礁(pytorch + yolov5训练自定义数据集)-python源码.zip
PPT经典背景音乐库 名称: 电视台常用图片呈现背景音乐 名称: 雄伟大气的曲子