PDO封装函数
header("Content-type: text/html; charset=utf-8"); 
    /**
     * 初始化 pdo 对象实例
     * @param bool $newinstance 是否要创建新实例
     * @return object->PDO
     */
    function pdo($newinstance = false){
        global $_W;
        if($newinstance) {
            $host = 'localhost';
            $dbname = 'pro';
            $dsn = "mysql:host={$host};dbname={$dbname}";
            $username = 'root';
            $passwd = 'root';
            $charset = 'UTF8';
            //连接数据库
            $db = new PDO($dsn, $username, $passwd);
            $sql = "SET NAMES $charset;";
            $db->exec($sql);
            return $db;
        } else {
            if(empty($_W['pdo'])) {
                $_W['pdo'] = $GLOBALS['pdo'] = pdo(true);
            }
            return $_W['pdo'];
        }
    }
    /**
     * 执行一条非查询语句
     *
     * @param string $sql
     * @param array or string $params
     * @return mixed
     *          成功返回受影响的行数
     *          失败返回FALSE
     */
    function pdo_query($sql, $params = array()) {
        if (empty($params)) {
            $result = pdo()->exec($sql);
            return $result;
        }
        //echo $sql;
        $statement = pdo()->prepare($sql);
        $result = $statement->execute($params);
        if (!$result) {
            return false;
        } else {
            return $statement->rowCount();
        }
    }
    /**
     * 执行SQL返回第一个字段
     *
     * @param string $sql
     * @param array $params
     * @param int $column 返回查询结果的某列,默认为第一列
     * @return mixed
     */
    function pdo_fetchcolumn($sql, $params = array(), $column = 0) {
        $statement = pdo()->prepare($sql);
        $result = $statement->execute($params);
        if (!$result) {
            return false;
        } else {
            return $statement->fetchColumn($column);
        }
    }
    /**
     * 执行SQL返回第一行
     *
     * @param string $sql
     * @param array $params
     * @return mixed
     */
    function pdo_fetch($sql, $params = array()) {
        $statement = pdo()->prepare($sql);
        $result = $statement->execute($params);
        if (!$result) {
            return false;
        } else {
            return $statement->fetch(pdo::FETCH_ASSOC);
        }
    }
    /**
     * 执行SQL返回全部记录
     *
     * @param string $sql
     * @param array $params
     * @return mixed
     */
    function pdo_fetchall($sql, $params = array(), $keyfield = '') {
        $statement = pdo()->prepare($sql);
        $result = $statement->execute($params);
        if (!$result) {
            return false;
        } else {
            if (empty($keyfield)) {
                return $statement->fetchAll(pdo::FETCH_ASSOC);
            } else {
                $temp = $statement->fetchAll(pdo::FETCH_ASSOC);
                $rs = array();
                if (!empty($temp)) {
                    foreach ($temp as $key => &$row) {
                        if (isset($row[$keyfield])) {
                            $rs[$row[$keyfield]] = $row;
                        } else {
                            $rs[] = $row;
                        }
                    }
                }
                return $rs;
            }
        }
    }
    /**
     * 更新记录
     *
     * @param string $table
     * @param array $data
     *          要更新的数据数组
     *          array(
     *              '字段名' => '值'
     *          )
     * @param array $params
     *          更新条件
     *          array(
     *              '字段名' => '值'
     *          )
     * @param string $gule
     *          可以为AND OR
     * @return mixed
     */
    function pdo_update($table, $data = array(), $params = array(), $gule = 'AND') {
        global $_W;
        $fields = pdo_implode($data, ',');
        $condition = pdo_implode($params, $gule);
        $params = array_merge($fields['params'], $condition['params']);
        $sql = "UPDATE $table SET {$fields['fields']}";
        $sql .= $condition['fields'] ? ' WHERE '.$condition['fields'] : '';
        return pdo_query($sql, $params);
    }
    /**
     * 删除记录
     *
     * @param string $table
     * @param array $params
     *          更新条件
     *          array(
     *              '字段名' => '值'
     *          )
     * @param string $gule
     *          可以为AND OR
     * @return mixed
     */
    function pdo_delete($table, $params = array(), $gule = 'AND') {
        global $_W;
        $condition = pdo_implode($params, $gule);
        $sql = "DELETE FROM $table ";
        $sql .= $condition['fields'] ? ' WHERE '.$condition['fields'] : '';
        return pdo_query($sql, $condition['params']);
    }
    /**
     * 插入数据
     *
     * @param string $table
     * @param array $data
     *          要更新的数据数组
     *          array(
     *              '字段名' => '值'
     *          )
     * @param boolean $replace
     *          是否执行REPLACE INTO
     *          默认为FALSE
     * @return mixed
     */
    function pdo_insert($table, $data = array(), $replace = FALSE) {
        global $_W;
        $cmd = $replace ? 'REPLACE INTO' : 'INSERT INTO';
        $condition = pdo_implode($data, ',');
        //echo "$cmd $table SET {$condition['fields']}";
        //var_dump($condition['params']);
        return pdo_query("$cmd $table SET  {$condition['fields']}", $condition['params']);
    }
    /**
     * 返回lastInsertId
     *
     */
    function pdo_insertid() {
        return pdo()->lastInsertId();
    }
    /**
     * 转换PDO的字段与参数列表
     *
     * @param array or string $params
     *          可以是数组或字符串
     *          是字符串直接返回
     * @param string $glue
     *          字段间的分隔符
     *          可以为逗号(,)或是 AND OR 应对不同的SQL
     * @return mixed
     *          array(
     *              'fields' 字段列表或条件
     *              'params' 参数列表
     *          )
     */
    function pdo_implode($params, $glue = ',') {
        $result = array('fields' => ' 1 ', 'params' => array());
        $split = '';
        if (!is_array($params)) {
            $result['fields'] = $params;
            return $result;
        }
        if (is_array($params)) {
            $result['fields'] = '';
            foreach ($params as $fields => $value) {
                $result['fields'] .= $split . "`$fields` =  :$fields";
                $split = ' ' . $glue . ' ';
                $result['params'][":$fields"] = is_null($value) ? '' : $value;
            }
        }
        return $result;
    }
    //标明回滚起始点
    function pdo_begin(){
        return pdo()->beginTransaction();
    }
    //标明回滚结束点,并执行SQL
    function pdo_commit(){
        return pdo()->commit();
    }
    //执行回滚
    function pdo_back(){
        return pdo()->rollBack();
    }
PDO封装函数的更多相关文章
- Javascript:来一个AJAX封装函数
		前不久换工作了,最近一直在出差,忙得跟狗一样,所以博客都荒废许久了. 最近的工作中涉及到大量的ajax操作,本来该后台做的事也要我来做了.而现在使用的ajax函数是一个后台人员封装的—-但他又是基于 ... 
- jQuery封装函数
		//1,插件命名:jQuery.插件名.js 为拉避免和其他库的冲突// //2,自定义插件尽量避免使用$ 如果非要使用$就一定要将jQuery传递进去,//写在最后加一个小括号写jquery ;结束 ... 
- 浏览器兼容——DOM事件封装函数
		//封装函数var eventUtil={ //添加事件 addHandler:function(element,type,handler){ if(element.addE ... 
- WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法
		原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ... 
- Ajax封装函数笔记
		Ajax封装函数: function ajax(method, url, data, success) { //打开浏览器 //1.创建一个ajax对象 var xhr = null; try { x ... 
- JS运动缓冲的封装函数
		之前经常写运动函数,要写好多好多,后来想办法封装起来.(运动缓冲). /* 物体多属性同时运动的函数 obj:运动的物体 oTarget:对象,属性名为运动的样式名,属性值为样式运动的终点值 rati ... 
- js面向对象学习笔记(二):工厂方式:封装函数
		//工厂方式:封装函数function test(name) { var obj = new Object(); obj.name = name; obj.sayName = function () ... 
- javascript封装函数入门
		封装函数的入门 一.使用函数有两步: 1.定义函数,又叫声明函数, 封装函数. 定义函数的三个要素:功能,参数,返回值. function 函数名(形参){ 函数代码 return 结果} //2.调 ... 
- ajax请求封装函数
		写封装函数的套路 1.先写出这个函数原来的基本用法 2.写一个没有形参空函数,将上一步的代码直接作为函数体, 3.根据使用过程中,抽象出来需要变的东西作为形参 function ajax (metho ... 
随机推荐
- WCF默认实例的解读
			一:图片 IService1.cs是定义的接口,包含对Service.方法和方法用的类的声明的声明 Service1.cs是对接口的实现,包含实现的方法 代码注释: using System; usi ... 
- 2013=12=2 bitree-----补充
- ubunu设置java命令为全局的命令-添加到全局环境变量
			sudo vim /etc/environment 在environment中后边添加代码: JAVA_HOME=/usr/local/jdk1.6.0_31 CLASSPATH=/usr/local ... 
- UITouch附加
			框架 /System/Library/Frameworks/SpriteKit.framework 可用性 可用于iOS 7.0或者更晚的版本 声明于 SKNode.h 概览 重要提示:这是一个初步的 ... 
- Android Spinner列表选择框
			Spinner Spinner是一个下拉列表,通常用于选择一系列可选择的列表项,它可以使用适配器,也可以直接设置数组源. 1.直接设置数组源 在res/values/strings.xml中设置数组源 ... 
- Citrix Presentation server can not contact the license server
			If you come across the above error, you may also come across one or more of the errors below within ... 
- SpringMVC03controller中定义多个方法
			<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ... 
- poj 1964 Cow Cycling(dp)
			/* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ... 
- canvas在手机qq浏览器显示错乱
			做大转盘的时候,使用html5 canvas 生成转盘,但在手机qq浏览器中显示错乱. 原本想在后台生成大转盘图片,后来想一想既然用图片来实现, 还不如直接由canvas 导出 toDataURL 在 ... 
- Js实现简单的联动,无数据库版本
			<html> <head> <title></title> <script language="javascript" typ ... 
